我正在使用 DBContext 并且有两个属性都是虚拟的类。我可以在调试器中看到,当我查询上下文时,我得到了一个代理对象。但是,当我尝试添加一个集合属性时,它仍然为空。我认为代理会确保集合被初始化。
因为我的 Poco 对象可以在其数据上下文之外使用,所以我在构造函数中添加了一个检查集合是否为 null 并在必要时创建它:
public class DanceStyle
{
public DanceStyle()
{
if (DanceEvents == null)
{
DanceEvents = new Collection<DanceEvent>();
}
}
...
public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
这在数据上下文之外有效,但是如果我使用查询检索对象,尽管测试为真,但当我尝试设置它时,我得到以下异常:'DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94'类型上的属性'DanceEvents'无法设置,因为集合已设置为 EntityCollection。
我可以看到它是空的,我不能添加到它,但我也不能将它设置为一个集合,因为代理说它已经设置好了。因此我不能使用它。我很困惑。
这是 DanceEvent 类:
public class DanceEvent
{
public DanceEvent()
{
if (DanceStyles == null)
{
DanceStyles = new Collection<DanceStyle>();
}
}
...
public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
我从上面的代码中省略了其他值类型属性。对于上下文类中的这些类,我没有其他映射。