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

Iai*_*way 9 code-analysis entity-framework ef-code-first

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

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这违反了代码分析规则2227"集合属性应该只读".

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

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后当然违反了CA1811"Foo.Bars.set(ICollection <Bar>)似乎没有上游公共或受保护的呼叫者".

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

Pro*_*ing 10

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

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

    public int Id { get; set; }
    public virtual ICollection<Bar> Bars { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 5

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

  • 正确的答案由Bonner提供。 (2认同)