2014-02-21 2 views
2

자체 관계 (부모/자식)가있는 엔터티 모델이 있습니다. Article라는 내 엔티티에는 parent라는 속성이 있습니다. 이 부모는 사실 관계이고, ParentID는 관계에있는 필드입니다. 엔티티 프레임 워크 (6)와엔터티 프레임 워크 업데이트 변경

using (var dbContext= new DataBaseModel()) 
{ 
    ArticleTable newEntity= new ArticleTable(); 
    newEntity.name="childArt"; 
    newEntity.ParentID = 1; 
    dbContext.ArticleTable.Add(newEntity); 
    dbContext.SaveChanges(); 

    //after calling save I can do this 
    var parentName = newEntity.Parent.Name; 
} 

, 이것은 내가 관련된 부모 엔티티를 얻기 위해 다시 데이터베이스에서 개체를 얻을 수 있고, 더 이상 작동하지 않습니다 EF 4에서 내가 이런 짓을. lazyloading이 변경 되었기 때문입니까? 나는 무엇을해야합니까.

답변

3

차이점은 EF4 엔티티는 변경 알림 및 지연로드를 처리하는 코드 더미로 생성된다는 점입니다. 그 이후로 POCO가있는 DbContext API가 표준이되었습니다.

당신이 오래된 '농축'기관과 같은 행동은 당신이 게으른 로딩이 조건들에 의해 발생할 수 있는지 확인해야합니다 :

  • 문맥은 게으른 로딩을 허용해야합니다. 기본적으로이 작업을 수행하지만 사용하지 않도록 설정할 수 있습니다.
  • 느린로드하려는 탐색 속성은
  • EF가 동적 프록시를 만들어야하기 때문에 virtual 수정자가 있어야합니다. 이러한 프록시는 원래 클래스의 가상 멤버를 재정의하기 때문에 지연로드를 실행할 수 있다는 점에서 이전에 생성 된 엔티티와 다소 유사합니다.

아마도 마지막 점 (아마도 두 번째 점)이주의해야 할 유일한 점일 것입니다. new으로 새 개체를 만드는 경우 지연로드를 수행 할 수없는 POCO 개체 일뿐입니다. 그러나 대신 프록시를 만들면 지연로드가 발생합니다.

ArticleTable newEntity= dbContext.ArticleTables.Create(); 

DbSet<T>.Create() 동적 프록시 만듭니다 - 기본 컨텍스트가 프록시를 생성하도록 구성된 경우

및 엔티티 유형은 프록시를 만들기위한 요구 사항을 충족 : 다행히도, 거기에 프록시를 만들 수있는 가장 쉬운 방법입니다 .