트리 관계를 구성하는 엔티티가 있습니다. 이 단체는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는 관계를 수정하는 프록시를 생성하지 않습니다.