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的关系?
答案 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)
将所有代码放在自己的程序集中,并排除该程序集的规则。