Я использую automapper для сопоставления своих объектов с viewmodel и формы viewmodel обратно в объект в поездке обратно из представления.Automapper с MVC и модифицированными вложенными объектами - как их обновить
У меня есть небольшая проблема, у меня есть список вложенных сущностей в моем измененном объекте, который можно изменить в представлении. Когда я сохраняю основной объект, даже если все кажется правильно отображенным в его вложенных объектах, вложенные объекты не обновляются (в консоли не отображаются связанные с ними SQL-инструкции).
Я уверен, что есть кое-что, что я пропустил, чтобы убедиться, что EF знает, что они были изменены.
Единственное, что я нашел, чтобы уведомить рамки сущности были изменены (даже если не все из них) в моем контроллере:
Database.Entry(character).State = EntityState.Modified;
foreach(CharacterAbilityScore cab in character.CharacterAbilityScores)
Database.Entry(cab).State = EntityState.Modified;
Если я правильно помню, когда я был с помощью сущности вместо ViewModels в моем представлении, мне не нужно было уведомлять EF о том, что вложенные объекты были изменены, он знал и обновлял базу данных соответственно.
Я просто хочу убедиться, что у меня правильный подход.
Сообщите мне, если вам нужно больше кода!
UPDATE:
Это, как я настроил automapper:
Mapper.CreateMap<CharacterViewModel, Character>()
.ForMember(dest => dest.CharacterAbilityScores, opt => opt.MapFrom(src => src.CharacterAbilityScoresDTO));
Окончательная обновление, ответ:
Так как я нахожусь в режиме MVC, и контекст воссозданный когда мы возвращаемся из сообщения в представлении, мне нужно вручную управлять тем, как мои дочерние сущности изменились, либо с объектами самопроверки, либо как я, отметив их изменения w Я знаю, что они, вероятно, будут. Это приведет к немного больше обновлений, чем необходимо.
Ну, это не весело ... :) Удивительно, что даже если коллекция была правильно сопоставлена в сущности с моей конфигурацией отображения, EF не смог заставить их обновить сам по себе, знаете ли вы, есть ли причина ? –
Это из-за отслеживания объекта EF. Путем сопоставления совершенно новой коллекции вместо старой, вы сообщаете EF, что она должна удалить все эти старые элементы, а затем добавить эти новые элементы. Путем ручной настройки состояния для изменения вы вызываете EF для присоединения этих новых элементов и вместо этого переключаетесь в режим обновления. –
Крис, когда я не заметил EF, чтобы изменить его, он не делал ничего с коллекцией. Нет удалений и воссозданий, обновлений, ничего. Вот почему я немного потерян. Я также считаю довольно странным, что я не могу автоматизировать дочерние объекты (я обновил свой вопрос, чтобы добавить, как я настроил для этого automapper) –