簡體   English   中英

為什么實體框架返回空List <>而不是空?

[英]Why does Entity Framework return null List<> instead of empty ones?

我是ASP .NET MVC世界的新手。 也許,這就是我無法向自己解釋對我來說是一個令人討厭的問題的原因。

我有一節有一對多的關系。

class MyClass{
    public List<OtherClass> otherClasses {get;set;}
}

當我持久化這個類的一個實例時,我用空List <>填充它的關系

MyClass myClass = new MyClass(){ otherClasses = new List<OtherClass>() }
context.myClass.Add(myClass);

問題是,當我嘗試檢索該實例時,出於任何原因,我嘗試訪問該列表,系統給我一個空參考例外...

我的問題是:為什么EF不返回空列表而不是空列表? 特別是在這種情況下,我堅持使用空列表?

有什么方法可以避免驗證實例是否為空?

您應該讓您的實體在構造函數中創建這些列表。 EF不會創建依賴集合,並期望實體這樣做。

所以,你的情況,你會讓你的實體像這樣:

class MyClass{ 
    public List<OtherClass> _otherClasses {get;set;} 

    public MyClass() {
        _otherClasses = new List<OtherClass>();
    }
} 

使otherClasses集合成為虛擬的。 這將使EF能夠延遲加載集合。

class MyClass{
    public virtual List<OtherClass> otherClasses {get;set;}
}

否則使用Include方法使用預先加載。

context.myClass.Include(m => m.otherClasses).SingleOrDefault(m => m.Id == foo);

因此,如果我理解正確,您List<OtherClass>上下文添加一個空的List<OtherClass> ,然后嘗試檢索它。

我想你必須考慮上下文如何跟蹤和查詢其上下文中的實體。 這通常由實體的Key完成。 在您的示例中,您沒有向實體提供Key ,因此,上下文沒有實體的句柄

因此,在查詢時,上下文找不到對象並返回null。

如果你想初始化一個新實體,我建議至少給它一個Key (通常是Id屬性),然后在你稍后查找時通過該鍵選擇。

希望這可以幫助。

暫無
暫無

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

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