相关疑难解决方法(0)

为什么我的Entity Framework Code First代理集合为null,为什么我不能设置它?

我正在使用DBContext并且有两个类,其属性都是虚拟的.我可以在调试器中看到,当我查询上下文时,我正在获取代理对象.但是,当我尝试添加它时,collection属性仍为null.我认为代理将确保集合初始化.

因为我的Poco对象可以在其数据上下文之外使用,所以我在构造函数中添加了对集合为null的检查,并在必要时创建它:

public class DanceStyle
{
    public DanceStyle()
    {
        if (DanceEvents == null)
        {
            DanceEvents = new Collection<DanceEvent>();
        }
    }
    ...
    public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这在数据上下文之外工作但是如果我使用查询检索对象,虽然测试是真的,但是当我尝试设置它时,我得到以下异常:'类型'DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94'上的属性'DanceEvents'无法设置,因为集合已经设置为EntityCollection.

我可以看到它是null并且我无法添加它,但我也不能将它设置为集合,因为代理已经设置它.因此我无法使用它.我糊涂了.

这是DanceEvent类:

public class DanceEvent
{
    public DanceEvent()
    {
        if (DanceStyles == null)
        {
            DanceStyles = new Collection<DanceStyle>();
        }
    }
    ...
    public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我从上面的代码中省略了其他值类型属性.我在上下文类中没有其他类的映射.

collections entity-framework poco proxies

41
推荐指数
2
解决办法
3万
查看次数

EF4.1 POCO:我为什么要使用ICollection

几乎所有为Entity Framework 4.1创建的POCO类的示例都是使用ICollection接口定义的:

public class TravelTicket
{
    public virtual int Id { get; set; }
    public string Destination { get; set; }
    public virtual ICollection<Person> Members { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会导致我的代码中的问题,我需要通过索引访问集合的成员,例如:

Paul Paul = TravelTicket.Members [3];

无法将带有[]的索引应用于类型为"System.Collections.Generic.ICollection"的表达式

那么我该如何解决这个问题呢?我应该总是将ICollection用于我的POCO集合吗?

c# entity-framework-4.1

6
推荐指数
1
解决办法
1522
查看次数