【问题标题】:Collection is not set in release build发布版本中未设置集合
【发布时间】:2016-06-16 17:50:19
【问题描述】:

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

仅在发布模式下编译代码时会发生,而在调试构建时不会发生。

感谢任何反馈。

迈克尔

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2017-09-23
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多