2016-11-21 130 views
1

我有這樣的實體:實體框架6懶加載問題

public class Crash : BaseModel 
{ 
    public string Message { get; set; } 
    public DateTime Time { get; set; } 
    public int ApplicationId { get; set; } 
    public virtual Application Application { get; set; } 

} 

以下作品完美,導航屬性Application是正確的:

_context.Set<T>().ToList(); 

但是這一次那些不填Application

_context.Set<T>().First(expression); 

正確的項目被檢索,但在獲取的項目財產Applicationnull

我應該怎麼做才能找到具有表達式的項目,並且仍然會自動加載導航屬性?

回答

1

您需要將其加載到您的查詢中才能加載它。這被稱爲急切加載。當你訪問它

_context.Set<Crash>().Include(x => x.Application).First(expression); 

您也可以關閉延遲加載和導航屬性將被載入。但請記住,這可能會導致性能問題。關閉延遲加載將會產生全局影響。

如果你只是想要這個特定的屬性被加載而沒有include,如上所示,你可以使屬性不是虛擬的。

Here有關延遲加載等更多信息的鏈接。

0

First()只返回一個單一值,而不是集合。與ToList()不同。

您的控件等待收集來。

單值不是隻有單個值的集合;

您需要創建一個包含First()返回值的記錄的集合。 這將是一條記錄的列表。