2012-08-22 49 views
8

我使用EF 5與Code First。我有一個班,我總是渴望加載一些屬性。我刪除了虛擬關鍵字,但它不是急於負載:通過關閉延遲加載,它不會自動貪婪加載正確的EF代碼第一次迫使迫切加載

public class Person 
{ 
    public ICollection<Email> Emails { get; set; } 
    public Profile Profile {get;set;} 
} 

所以呢?如果是這樣,我如何在不使用Include()的情況下將其歸檔?

謝謝!

回答

18

不,通過刪除關鍵字virtual來關閉延遲加載不會自動啓用預先加載。你必須Include相關EntityCollection像這樣:

var personWithProfile = ctx.People.Include(x => x.Profile).First(); 
var personWithProfileAndEmails = ctx.People. 
              .Include(x => x.Profile) 
              .Include(x => x.Emails) 
              .First(); 

這是從ADO.NET團隊博客一個偉大的閱讀:http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

感謝您的鏈接,它是非常有用的。我知道包含命令。但是沒有辦法強制POCO類定義(或映射文件)中的熱切加載? – Calvin

+1

不,你想明確告訴EF何時加載數據。如果你不這樣做,EF只是包括所有相關的實體,那麼就會有主要的性能問題。實質上,每個包含語句都轉換爲SQL「內部連接」,查詢也會選擇連接表中的每個列。 – Paul

+0

感謝您的澄清! – Calvin