关于c#:为什么Entity Framework返回null List<>

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

我是ASP.NET MVC领域的新手。也许,这就是为什么我不能向自己解释什么是,对我来说,一个恼人的问题的原因。

我有一个班,有一对多的关系。

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

当我坚持这个类的一个实例时,我用一个空列表来填充它的关系<>

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

问题是,当我尝试检索该实例时,无论出于什么原因,我尝试访问该列表,系统都会给我一个空引用异常…

我的问题是:为什么ef不返回空列表而不是空列表?尤其是在这种情况下,我用一个空列表来保存它?

有什么方法可以避免验证实例是否为空?


你应该把你的那些实体的创建,列表中的constructor。。。。。。。EF不t create馆藏和依赖性,expects实体做SO。。。。。。。 </P >

所以,你的情况,你会让你的人格,这样: </P >

1
2
3
4
5
6
7
class MyClass{
    public List<OtherClass> _otherClasses {get;set;}

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


麦克的otherClasses虚拟馆藏。这将使EF的懒惰的负荷的集合。 </P >

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

否则,用勤奋和Include装载方法。 </P >

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


所以,如果我理解你是correctly,增安List空的背景下,然后试图做出的检索它。 </P >

我猜你要想的关于如何在上下文将跟踪和查询的东西,这是在其上下文。这是通常用做Key该实体。在你的实例,你有没有一个Key给定的实体,因此,对环境有好的handle是实体。 </P >

因此,当你的查询,在语境中的不安与t find对象时返回null。 </P >

如果你想初始化一个新的实体,我会recommend给它至少一Key(通常的ID属性),然后选择用密钥,当你以后的查找。 </P >

希望这helps。。。。。。。 </P >