12

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<Bar>) 似乎没有上游公共或受保护的调用者”。

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

4

2 回答 2

14

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

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

    public int Id { get; set; }
    public virtual ICollection<Bar> Bars { get; private set; }
}
于 2015-03-24T20:23:08.817 回答
5

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

于 2012-06-21T14:05:04.000 回答