平台:.NET 4.5,EF6
原始代码:
model.ContentGroups = new List<ContentGroup>();
model.ContentGroups.Add(new ContentGroup());
工作代码:
model.ContentGroups.Clear()
model.ContentGroups = new List<ContentGroup>();
model.ContentGroups.Add(new ContentGroup());
ContentGroups定义:
private ICollection<ContentGroup> _contentGroups;
public virtual ICollection<ContentGroup> ContentGroups
{
get { return _contentGroups ?? (_contentGroups = new List<ContentGroup>()); }
set { _contentGroups = value; }
}
如果model.ContentGroups已包含一个项目,则原始代码会在集合中生成两个项目,除非故意调用集合Clear()
仅在发布模式下编译代码时才会发生,但在调试版本中不会发生。
感谢任何反馈。
迈克尔
答案 0 :(得分:0)
如果没有看到与您DbContext
相关的所有代码以及您如何实际使用此代码,我无法确定,但我认为这是因为将属性设置为新列表与实体框架的冲突。我猜这个问题与延迟加载和实体框架知道何时对数据库做某事有关。即使您已将其设置为新的List
,EF仍会转到数据库并在您枚举时重新填充列表。设置为新的List
并不能告诉EF在数据库方面做任何事情。
如果要清除列表,那么您需要的只是.Clear()
调用,无需将其设置为新列表。 Clear()
将指示EF在您SaveChanges
上DbContext
时更新数据库。