2013-07-31 151 views
5

我使用的EntityFramework首次,也許這個問題是這麼簡單......我已經用代碼首先method..I有一流的人才隊伍,看起來像這樣灌裝外鍵對象:在實體框架4

public class Personnel 
{ 

    public string Id { set; get; } 
    public int Code { set; get; } 
    public string Name { set; get; } 
    public int Type { set; get; } 

    public JobTitle Title { set; get; } 
} 

和JOBTITLE類:

public class JobTitle 
{ 
    public string Id { set; get; } 
    public int Number { set; get; } 
    public string Title { set; get; } 

    public List<Personnel> Personnels { set; get; } 

} 

這在人事類的最後一個屬性是course..my問題的人員表的外鍵是當我想要檢索的所有人員(或人員)從數據庫使用lambda表達式..外鍵對象爲空.. lambda表達式爲1 ike below:

Context.ContextInstance.Personnels.ToList(); 

如果我改變表達式,這個外鍵對象不是空的。

Context.ContextInstance.Personnels.Include("Title").ToList(); 

是正確的方式?? ..有沒有更好的辦法?..我推測,EF將自動明白!!!!如果有超過1 FK那我也使用包括所有這些?請幫我理解。

感謝

+0

可能的重複[禁用實體框架4中的默認延遲加載](http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

回答

5

這是由於延遲加載。當你打電話給Context.ContextInstance.Personnels.ToList();時,這將獲取所有人員的職務,但Title將不會獲取,直到它被實例化,所以讓它虛擬得到它。

或者,您可以通過

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { 
    this.Configuration.LazyLoadingEnabled = false; 
} 

禁用延遲加載這樣做會從上下文中獲得所有相關的數據。當您指定要查詢的屬性時,使用「include」將按需加載。

虛擬關鍵字允許實體框架運行時爲您的實體類及其屬性創建動態代理,並支持延遲加載。如果沒有虛擬,延遲加載將不被支持,並且您在集合屬性上獲得空值。