未在发布版本中设置集合

时间:2016-06-16 17:50:19

标签: entity-framework-6 asp.net-4.5

平台:.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()

仅在发布模式下编译代码时才会发生,但在调试版本中不会发生。

感谢任何反馈。

迈克尔

1 个答案:

答案 0 :(得分:0)

如果没有看到与您DbContext相关的所有代码以及您如何实际使用此代码,我无法确定,但我认为这是因为将属性设置为新列表与实体框架的冲突。我猜这个问题与延迟加载和实体框架知道何时对数据库做某事有关。即使您已将其设置为新的List,EF仍会转到数据库并在您枚举时重新填充列表。设置为新的List并不能告诉EF在数据库方面做任何事情。

如果要清除列表,那么您需要的只是.Clear()调用,无需将其设置为新列表。 Clear()将指示EF在您SaveChangesDbContext时更新数据库。