相关疑难解决方法(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万
查看次数

实体框架POCO默认构造函数

是否可以使用默认构造函数来设置一些默认值,如:

public class BetScreenshot
{
   ...

   public BetScreenshot()
   {
       CreationDateTime = DateTime.UtcNow;
       StatusEnum = BetScreenshotStatus.NotProcessed;
   }
}
Run Code Online (Sandbox Code Playgroud)

我的第一个不好的感觉是这些属性可能在EF实体实例化期间被标记为已修改.但可能还有别的吗?

.net entity-framework

7
推荐指数
1
解决办法
1916
查看次数

标签 统计

entity-framework ×2

.net ×1

collections ×1

poco ×1

proxies ×1