![](/img/trans.png)
[英]Why does Entity Framework FindFirstOrDefault returns ExecutionException instead of null
[英]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.