문제

현재 진행중인 프로젝트의 일부에는 신디케이트 가능한 작업을위한 4 개의 테이블 세트가 있습니다. 하나의 테이블은 다른 세 가지의 추상적 기반이며 각 테이블은 다음과 같은 내 EF 모델에 표시됩니다.

EF 모델 - 행동 http://chris.charabaruk.com/system/files/images/ef+model+ actions.png

그러나 현재 직면 한 두 가지 문제가 있습니다. 첫 번째 문제는 그 것입니다 Actor (A에 대한 참조 User) 그리고 Subject (각 유형의 행동과 관련된 클래스의 엔티티에 대한 참조)는 다음과 같습니다. null 내 하위 클래스에서는 관련 데이터베이스 열에도 불구하고 관련 테이블의 행에 유효한 키를 보유하고 있음에도 불구하고. 나는 열쇠를 통해 얻을 수 있지만 ActorReference 그리고 SubjectReference 물론 이것은 새로운 EF 컨텍스트를 설정하고 참조 된 객체에 대해 쿼리해야합니다. FooReference.Value 또한 null).

두 번째 문제는 콘크리트 액션 클래스와 관련 엔티티 클래스 간의 관계의 상호 끝이 항상 아무것도 나타나지 않는다는 것입니다. 예를 들어, Task.RelatedActions, 그것은 나에게 모든 것을 줄 것입니다 TaskAction 물체는 어디에 있습니다 Subject 특정 작업 객체를 나타냅니다 RelatedActions 호출되며 전혀 물체가 없습니다. 다시 말하지만, 유효한 행은 데이터베이스에 존재하며 엔티티 프레임 워크는 객체에 넣고 나에게 건네지 않습니다.

누구든지 그것이 내가 잘못하고있는 것을 알고 있으며, 그것을 작동시키기 위해 무엇을해야합니까?

업데이트: 관계 속성 중 어느 것도 내 엔티티 모델에서 더 이상 작동하지 않는 것 같습니다. wtf ...

도움이 되었습니까?

해결책

여기서 겪고있는 문제는 기본적으로 EF가 자동으로 관련 엔티티를로드하지 않는다는 것입니다. 엔티티를로드하는 경우 다음 작업 중 하나를 수행하지 않으면 관련 엔티티에 대한 수집 또는 참조가 비어 있습니다.

1) 단일 쿼리에서 주 엔티티와 관련 엔터티를 검색하려면 열심된로드를 사용하십시오. 이렇게하려면 포함 메소드에 호출을 추가하여 쿼리를 수정하십시오. 위의 샘플에서 다음 쿼리를 사용할 수 있습니다.

from a in context.Actions.Include("Actor") select a

이것은 관련 액터 방법으로 각 행동을 검색합니다.

2) 명시 적 게으른 하중을 사용하여 관련 실체를 검색 할 필요가있을 때 :

action1.ActorReference.Load()

.NET 4.0으로 배송되는 EF 버전에는 다음 추가 옵션도 있습니다.

3) 내비게이션 속성을 참조 할 때 관련 엔티티가 자동으로 검색되도록 암시 적 게으른 하중을 켜십시오.

  • 대니
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top