为什么Entity Framework返回空List 而不是空?
我是ASP .NET MVC世界的新手。 也许,这就是我无法向自己解释对我来说是一个令人讨厌的问题的原因。
我有一节有一对多的关系。
class MyClass{ public List otherClasses {get;set;} }
当我持久化这个类的一个实例时,我用空List 填充它的关系
MyClass myClass = new MyClass(){ otherClasses = new List() } context.myClass.Add(myClass);
问题是,当我尝试检索该实例时,由于任何原因,我尝试访问该列表,系统给我一个空参考例外…
我的问题是:为什么EF不返回空列表而不是空列表? 特别是在这种情况下,我用空列表坚持它?
有什么方法可以避免validation实例是否为null?
您应该让您的实体在构造函数中创建这些列表。 EF不会创建依赖集合,并期望实体这样做。
所以,你的情况,你会让你的实体像这样:
class MyClass{ public List _otherClasses {get;set;} public MyClass() { _otherClasses = new List (); } }
使otherClasses
集合成为虚拟的。 这将使EF能够延迟加载集合。
class MyClass{ public virtual List otherClasses {get;set;} }
否则使用Include
方法使用预先加载。
context.myClass.Include(m => m.otherClasses).SingleOrDefault(m => m.Id == foo);
因此,如果我理解正确,您List
上下文添加一个空的List
,然后尝试检索它。
我想你必须考虑上下文如何跟踪和查询其上下文中的实体。 这通常由实体的Key
完成。 在您的示例中,您尚未向实体提供Key
,因此,上下文无法处理实体。
因此,在查询时,上下文找不到对象并返回null。
如果你想初始化一个新实体,我建议至少给它一个Key
(通常是Id属性),然后在你稍后查找时通过该键选择。
希望这可以帮助。