Я создал сопоставление для сопоставления коллекции в ViewModel с другой коллекцией модели, которая, кажется, работает без проблем. После сопоставления дочерний объект модели имеет соответствующие обновления.Как обновить объект с вложенными объектами с помощью AutoMapper и сохранить обновленную структуру Entity с Entity Framework?
configuration.CreateMap<SourceViewModel, Destination>()
.ForMember(d => d.ChildOfDestination,
opt => opt.MapFrom(s => Mapper.Map<ICollection<SourceViewModel>, ICollection<Destination>>(s.ChildOfSource)));
Однако при сохранении выдается ошибка:
Операция не удалась: Отношения не могут быть изменены, так как один или несколько внешних ключей свойств не является обнуляемым. Когда происходит изменение отношения, соответствующее свойство внешнего ключа устанавливается равным нулевому значению. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, для свойства внешнего ключа должно быть назначено другое ненулевое значение, или не связанный с ним объект должен быть удален.
То, что я нашел, это ChangeTracker.Entries() имеет дополнительные элементы с состоянием «Добавлено». Например, у моего Model.ChildCollection есть счет 2, но в Entries() у меня есть исходные 2 элемента из ChildCollection с состояниями «Модифицировано» и 2 из тех же элементов с состояниями «Добавлено»
Я написал некоторый код, чтобы обойти проблему на данный момент, но это взломать большую проблему, и я не уверен, как ее решить.
foreach (var child in ViewModel.Child)
{
var record = Model.Child.SingleOrDefault(c => c.ID == child.ID);
if (record != null)
Mapper.Map(child, record);
else
Model.Child.Add(Mapper.Map<SourceViewModel, Destination>(child));
}
Помог ли мой ответ? – Seany84