2011-04-22 4 views
4

먼저 EF 4.1 코드를 사용하고 있습니다.EF 4.1 - 가상 컬렉션 속성에 항목 추가

public class Doctor 
{ 
    public virtual ICollection<Hospital> Hospitals { get; set; } 
} 

참고 : 다음 클래스 조각을 감안할 때 나는 데이터베이스 컨텍스트이 있습니다

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    this.Configuration.LazyLoadingEnabled = false; 
} 

내가 게으른 로딩이 여기에 포함되지 않았는지 확인하고 싶었다.

내가 가지고있는 문제는 병원 속성에 virtual 키워드가 없으면 병원과 관련이있는 의사를 검색 할 때 컬렉션이 비어 있다는 것입니다. virtual 키워드를 포함하면 병원 컬렉션에 예상 한 1 개의 항목이 포함됩니다.

새로운 병원을 만들고 병원과 즉시 연결할 때 병원 위치가 아직 초기화되지 않았으므로 Null reference 예외가 발생한다는 문제가 있습니다.

누군가 내가 여기서 잘못하고있는 것을 지적 할 수 있습니까? 새 의사를 만들 때 어떻게 병원에 항목을 추가 할 수 있습니까?

건배. Jas. 당신이 virtual 키워드를 사용하지 않는 경우

public class Doctor 
{ 
    private ICollection<Hospital> _hospitals; 
    public virtual ICollection<Hospital> Hospitals 
    { 
     get { return _hospitals ?? (_hospitals = new HashSet<Hospital>()); } 
     set { _hospitals = value } 
    } 
} 

하는 EF 당신을 위해 콜렉션을 초기화하지 않습니다

답변

22

귀하의 코드는 일반적으로 모든 예에서 볼 수 있지만,이 사람이 훨씬 더이 일을하는 것을 무언가이다. 같은 시간에 해당 생성자를 통해 새로운 Doctor 브랜드를 만든 경우 초기화를 직접 처리해야합니다.

+0

좋은 결과. 건배. –

+0

내 소식을 볼 때마다 내 문제를 해결합니다. 당신이 EF에 관한 책을 가지고 있다면 나는 그것을 살 것입니다! – GraemeMiller

+0

해결책 주셔서 감사합니다. 나를 위해 일했다. – OSH

1

나는 이것이 당신을 도울 수 있다고 생각합니다.

public class Doctor 
{ 
    public Doctor() 
    { 
     Hospitals = new ICollection<Hospital>(); 
    } 

    public virtual ICollection<Hospital> Hospitals { get; set; } 
} 
+0

결국, 그게 내가 한 일입니다. - ctor에 새로운 인스턴스를 생성합니다. –

+1

ICollection ??? (인터페이스)에 대한 설명을 만들 수 있습니까? – ManirajSS

관련 문제