为什么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属性),然后在你稍后查找时通过该键选择。

希望这可以帮助。