實體框架引用未自動加載

ado.net c# entity-framework

在ADO.Net實體框架中,我有一個對象,它有4個對其他對象的引用。出於某種原因,當我查詢這些引用時,其中兩個自動加載(如預期的那樣),其中兩個總是返回null。

奇怪的是,當我手動詢問引用加載時,它們加載的只是花花公子。

舉個例子:

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

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

當我第一次檢查HoldingEntity它始終為null,但是Load將返回HoldingEntity而沒有問題。

有線索嗎?

謝謝!

一般承認的答案

使用ADO.NET實體,您需要使用Include指定要自動加載的實體,如

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

熱門答案

正如其他人所說的那樣,你需要在v1中.Include()以避免需要調用.Load()

在4.0中,您將能夠設定DeferredLoadingEnable d您ObjectContext (我認為我們正在改變這個名字更合適的LazyLoadingEnabled及時Beta2中)。

至於為什麼你已經加載了2個關係。這可能是一種叫做“關係修復”的副作用。

當兩個相關實體處於同一個上下文中時,它們會自動將它們的關係固定為相互指向。因此,如果(我懷疑)4個實體中的2個已經在您的上下文中,當您執行查詢時,即使您沒有調用,也會在加載了2個關係的情況下結束.Include().Load()

希望這可以幫助

乾杯亞歷克斯



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因