为什么我的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; }
}
这在数据上下文之外工作但是如果我使用查询检索对象,虽然测试是真的,但是当我尝试设置它时,我得到以下异常:'类型'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; }
}
我从上面的代码中省略了其他值类型属性。我在上下文类中没有其他类的映射。
没有找到相关结果
已邀请:
3 个回复
眠皇
在上面的代码中,collection属性不再是自动的,而是具有支持字段。如果您保护setter更好,防止任何代码(代理除外)随后修改这些属性。您会注意到构造函数不再是必需的并被删除。
磋判粗惊
我仍然感到困惑,即使我的代码现在正在运行,因为上面的修复。
香腔弥胯瓤
和代理代码:
正如你可以看到ExtityFramework 5中代理类引发的异常。这意味着行为仍然存在。