ViewModel의 컬렉션을 문제없이 작동하는 모델의 다른 컬렉션에 매핑하는 매핑을 만들었습니다. 매핑 후에 모델의 자식 객체가 적절한 업데이트를가집니다.AutoMapper가있는 중첩 엔티티로 엔티티를 업데이트하고 업데이트 된 엔티티를 엔티티 프레임 워크로 저장하는 방법은 무엇입니까?
configuration.CreateMap<SourceViewModel, Destination>()
.ForMember(d => d.ChildOfDestination,
opt => opt.MapFrom(s => Mapper.Map<ICollection<SourceViewModel>, ICollection<Destination>>(s.ChildOfSource)));
그러나, 저장에 오류가 발생합니다 :
작업
실패 : 하나 또는 외래 키 속성의 이상이 아닌 Null을 허용하기 때문에 관계는 변경 할 수 없습니다. 관계가 변경되면 관련 외래 키 등록 정보는 널 (NULL) 값으로 설정됩니다. 외부 키가 널값을 지원하지 않으면, 새 관계가 정의되어야하고, 외부 키 등록 정보에 널이 아닌 다른 값이 지정되어야합니다. 그렇지 않으면 관련이없는 오브젝트가 h 제되어야합니다.
내가 발견 한 것은 ChangeTracker.Entries()에 상태가 "추가됨"인 추가 항목이 있습니다. 예를 들어, 내 Model.ChildCollection의 개수는 2이지만 Entries()에는 ChildCollection의 원래 2 개 항목과 "Modified"상태가 있고 2 개 항목에 "Added"상태가있는 항목이 있습니다.
당분간 문제를 해결하기 위해 몇 가지 코드를 작성했지만 해결 방법이 확실하지 않은 큰 문제에 대한 해킹입니다.
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