2011-03-28 2 views
3

어떤 이유로 Entity Framework 모델에서 탐색 속성이 작동하지 않습니다.RelationshipManager.GetRelatedReference <T> (,)은 항상 null 값을 가진 EntityReference <T>을 반환하겠습니까?

From the direction N->1, EntityReference를 얻으려고 할 때마다 EntityKey가 올바르더라도 null 값이 제공됩니다.

From the direction 1->N, 컬렉션은 항상 비어 있습니다.

이 동작은 전체 모델에서 일관됩니다.

이유가 무엇이든, 일관성없는 참조를 자동으로 검색하는 대신 예외가 발생해야한다고 생각합니다.

참조에 null 값이 포함될 수있는 이유는 무엇입니까?

편집

난 그냥 게으른 로딩 함께 할 수있는 뭔가가 나타났습니다. IsLoaded 속성을 false로 설정하고 Load 메서드를 명시 적으로 호출하면 EntityReference (T)가 문제를 해결합니다. 문제는 탐색 속성에 액세스 할 때 호출되는 RelationshipManager.GetRelatedReference 메서드가 EntityReference를로드해야한다는 것입니다. 그렇지 않아?

답변

3

이 문제는 LazyLoadingEnabled 속성의 의미로 인한 것입니다.

언뜻 보면 LazyLoadingEnabled = false는 개체가로드 될 때 EF가 개체 관계를로드한다는 것을 의미합니다. 물론 EF가 전체 데이터베이스를로드하지 못하도록하는 몇 가지 제한이 있습니다. 실제로, 그것은 관계가 결코는 함축하게 적재 될 것이라는 점을 의미한다. 즉, direction N->1에서 반환 된 EntityReference(T)은 올바른 EntityKey을 갖지만 IsLoaded은 거짓이며 Value은 null이됩니다. 반면에 direction 1->N에서 컬렉션은 비어 있으며 IsLoaded은 false입니다. EntityReference 또는 EntityCollectionLoad 메서드를 사용하여 명시 적으로로드 할 수 있습니다.

LazyLoadingEnabled = true, 다른 한편으로는 의미하는 것 같습니다. 연결은 필요할 때마다로드됩니다.

기본값은 false이며,이 모든 혼란이 시작되었습니다.

혼동을 막기 위해 의미있는 값을 가진 열거 형인 LoadingMode이라는 속성이 있어야합니다. 유사 : None, Lazy, Eager

관련 문제