2017-01-25 2 views
3

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)); 
} 
+0

내 대답이 도움이 되었습니까? – Seany84

답변

1

엔티티 프레임 워크 6

연결이 끊긴 데이터는 그 문제에, 대부분의 데이터 액세스 툴, 엔티티 프레임 워크 선행과 오래 된 문제입니다. 해결하기가 쉽지 않았습니다. . 서버는 데이터를 요청한 클라이언트 응용 프로그램에서 이 무슨 일이 일어날 지 알지 못하며, 다시 반환하려면 을 알지 못한다. 그런 다음 갑자기 일부 데이터가 요청에 다시 나타납니다. 하지만 같은 데이터입니까? 부재시에는 무엇이 있었습니까? 아무 일도 없었습니까? 완전히 새로운 데이터입니까? 너무 걱정 많아 !

출처 :로도 알려져 https://stackoverflow.com/a/21436713/550198

엔티티 프레임 워크 코어/엔티티 프레임 워크 7

엔티티 프레임 워크 코어 : 위의 기사를 참조하여이 사이트에 https://msdn.microsoft.com/da-dk/magazine/mt694083

아주 좋은 반응 EF7에는 객체 그래프를 걸을 수있는 새로운 기능이 있습니다. 예 :

context.ChangeTracker.TrackGraph(someEntity, e => e.Entry.State = EntityState.Added);