2009-06-23 3 views
7

ADO.Net Entity Framework에서 다른 개체에 대한 참조가 4 개있는 개체가 있습니다. 웬일인지, 내가 그 참조를 질의 할 때, 그들 중 2 명은 (예상대로) 자동으로로드되고, 그 중 2 명은 항상 null을 리턴한다.Entity Framework 참조가 자동으로로드되지 않습니다.

기괴함만큼, 내가 수동으로로드에 대한 참조를 부탁, 그들은 그냥 멋쟁이로드합니다. 예를 들어

:

if (account.HoldingEntity == null && 
    account.HoldingEntityReference.EntityKey != null) { 

    account.HoldingEntityReference.Load(); 
    account.HoldingEntity = account.HoldingEntityReference.Value; 
} 

내가 먼저 항상 널 (null)입니다 HoldingEntity을 검사 할 때, 그러나로드가 문제없이 HoldingEntity를 반환합니다.

실마리가 있습니까?

감사합니다. ADO.NET 엔티티를 사용

답변

7

, 당신은

Dim entity = (From e in db.Entities.Include("SubEntity")) 
+0

완벽하게하는 데 도움이! 내가 아직도 이해할 수없는 부분은 두 가지 참조가 자동으로로드되고 두 개가 자동으로로드되는 이유입니다. – gerrod

+0

그건 완전히 사실이 아닙니다 (적어도 EF 4에서는 EF 1로 일한 적이 없었습니다). 자동으로 (그리고 즉각적으로)로드 할 참조를 지정할 수 있지만 필요에 따라로드를 지연로드에 의존 할 수도 있습니다. 그러나 EF 4에서도 게으른로드가 깨진 것처럼 보입니다. 따라서 실제적인 관점에서 볼 때 여전히 올바른 대답 일 것입니다. http://msdn.microsoft.com/en-us/library/bb896272를 참조하십시오.aspx –

0
이것은 디자인 결정으로 EF v1에 이루어졌다

같이, 당신은 Include 자동으로로드 원하는 요소를 지정할 필요가 있고, 많은 개발자들이 실제로 필요 선호 참조 된 속성이로드 될지 여부와 언제 명시 적으로 제어 할 것인가.

2009 년 말 이전에 .NET 4.0이 나오는 EF v4의 경우 원하는 경우 자동 지연로드를 사용하도록 설정할 수 있습니다. EF v4의 지연로드에 대한 자세한 내용은 ADO.NET 팀 블로그의 this blog post을 참조하십시오.

마크 다른 사람이 당신이에 DeferredLoadingEnable D를 설정할 수 있습니다 4.0 .Load()

를 호출 할 필요 피하기 위해 V1에 .Include() 할 필요가 말했듯이

+0

사실입니다, Marc,하지만 지연로드 문제는 데이터베이스에 많은 쿼리가 있으며 현명하게 사용해야한다는 것입니다. 필요에 따라 엔티티를 미리로드하는 것이 간단합니다. –

5

당신의 ObjectContext (나는 우리가이 이름을 변경하는 생각 Beta2에 맞춰 더 적절한 LazyLoadingEnabled으로 변경).

어쨌든 두 개의 관계가로드 된 이유는 다음과 같습니다. 아마도 Relationship Fix-up이라는 부작용 일 것입니다.

두 개의 관련 엔티티가 동일한 컨텍스트에있는 경우 자동으로 관계가 서로를 가리 키도록 고정됩니다. 따라서 4 개의 엔티티 중 2 개의 엔티티가 컨텍스트에 이미있는 경우 쿼리를 수행 할 때 .Include() 또는 .Load()을 호출하지 않았더라도 관계가 2 개로드되는 상황이 발생하게됩니다.

희망이, 덕분에 그것을 해결하는,

건배 알렉스

+0

아! 고마워, 완벽하게 이해가된다. – gerrod

+0

관계를 자동으로 수정하는 방법과이를 사용 중지하는 방법이 있습니까? 이것은 물체를 다시 채우기 때문에 심각한 부작용을 일으 킵니다. 감사! – strongriley