簡體   English   中英

實體框架渴望EF4和EF6中的加載差異

[英]Entity framework eager loading difference in EF4 AND EF6

什么是EF6中的EntityCollection.Load()? 我目前正在閱讀一本針對EF4的書,在其中一個示例中,它調用了Load()方法:

foreach (var contact in contacts)
{
    contact.Addresses.Load();
    Console.WriteLine(contact.Addresses.Count);
}

我正在使用EF6進行測試並查看互聯網,這是我發現的有效方法:

foreach (var contact in contacts)
{
    context.Entry(contact).Collection(c => c.Addresses).Load();
    Console.WriteLine(contact.Addresses.Count());
}

但是,如果這是等效的,那么當我使用EF4運行代碼時,為什么與第一個代碼相比這么慢(非常非常慢)? 這兩個代碼都禁用了LazyLoading。 我知道可能有更好的編碼方法可以使其加載更快,但是我很好奇為什么EF6的代碼比EF4的代碼要慢得多(對此)。 還是這不是EF6中的等效代碼?

更接近的等效項可能是:

context.Configuration.AutoDetectChangesEnabled = false;
foreach (var contact in contacts)
{
    context.Entry(contact).Collection(c => c.Addresses).Load();
    Console.WriteLine(contact.Addresses.Count());
}

如果AutoDetectChangesEnabled設置為true (默認情況下),則.Entry方法DetectChanges內部調用DetectChanges 根據上下文中實體的數量和contacts的數量,自動更改檢測可能會非常耗時,尤其是在循環中多次調用時。 在EF 4和ObjectContext ,沒有AutoDetectChangesEnabled標志,並且當AutoDetectChangesEnabledtrue時,在DbContext API中沒有像在DbContext API中那樣執行更改檢測。

您能否嘗試改善性能? 我也會很感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM