2

트리 관계를 구성하는 엔티티가 있습니다. 이 단체는AsNoTracking() 관계없이 라고변경 내용 추적을 사용할 수 없지만 프록시가 생성 될 때 관계 픽스 업을 가능하게 할 수 있습니까?

class MyEntity 
{ 
    public int Id {get;set;} 

    public int ParentId {get;set;} 
    public virtual MyEntity Parent {get;set;} 

    public virtual ICollection<MyEntity> Children {get;set;} 
} 

까지 고정됩니다.

var entities = MyEntitiesSet.ToList(); 

모든 탐색 속성 및 모음이 설정됩니다.
그러나 경우 AsNoTracking()가 호출됩니다 :

var entities = MyEntitiesSet.AsNoTracking.ToList(); 

더 탐색 속성이 설정되지 않습니다. 이해할 수 있습니다. 수집 및 naviagtion 속성이 코드에 대한 관계 픽스를 제공하기 위해 재정의 (override)되지 않는 이유 그러나 나는 이해할 수 없다 : 여기

entity.Parent = anotherEntity; 

내가 anotherEntity.Children 컬렉션 지금 개체가 포함되어 기대합니다. 아아, 내 실험에서 보여 주듯이 이것은 잘못된 기대입니다.

변경 내용 추적을 사용하지 않고 원하는 동작을 얻을 수 있습니까?

업데이트 1

내가 생성 된 프록시에 loked 및 오버라이드 (override) 컬렉션은 프록시 유형의 hashsets 있음을 지적했다. 그들은 EntityCollection<TEntity>에 의해 백업되지 않습니다. EF 4 ObjectContext proxies에 해당합니다.

그리고 대답은 here입니다.
DbContext는 관계를 수정하는 프록시를 생성하지 않습니다.

답변

0

추적과 관련이있는 것은 확실하지 않지만 관계를 작동 시키려면 컬렉션 탐색 속성을 사용중인 키와 연관시켜야합니다. 예를 들어 here을 참조하십시오.