实体框架代码优先和CA2227“集合属性应该是只读的”

时间:2012-06-21 13:58:42

标签: entity-framework ef-code-first code-analysis

Entity Framework Code First中的一对多或多对关系如下所示: -

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; set; }
}

这违反了代码分析规则2227“集合属性应该只读”。

使setter受到保护并没有帮助,并将其设为私有: -

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; private set; }
}

当然违反了CA1811“Foo.Bars.set(ICollection&lt; Bar&gt;)似乎没有上游公众或受保护的来电者”。

我宁愿不要全局关闭规则,因为它存在的预防情况相当重要,但每次我想声明关系时在本地抑制它似乎都是关闭的。有没有办法声明不违反CA2227的关系?

2 个答案:

答案 0 :(得分:8)

将您的代码更改为以下内容:

public class Foo {
    public Foo() {
        Bars = new Collection<Bar>();
    }

    public int Id { get; set; }
    public virtual ICollection<Bar> Bars { get; private set; }
}

答案 1 :(得分:4)

将所有代码放在自己的程序集中,并排除该程序集的规则。