2012-06-21 25 views
5

在實體框架代碼第一次一個一對多或多對多的關係是這樣的: -實體框架代碼優先和CA2227「集合屬性應爲只讀」

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

這違反了代碼分析規則2227「集合屬性應該是隻讀的「。

使保護不利於制定者,並使其私人: -

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

當然再違反了CA1811「Foo.Bars.set(ICollection的<酒吧>)似乎沒有上游公共或受保護呼叫者「。

我不想在全球範圍內關閉這個規則,因爲它存在的預防情況是相當重要的,但是每當我想聲明關係似乎都是在本地抑制它。有沒有辦法宣佈不違反CA2227的關係?

+0

我有完全相同的問題。在我沒有找到任何合理的解決方案後,我決定SuppressMessage()可能是最實用的方法。 – theDmi

回答

4

將您的所有代碼第一個實體放在它們自己的程序集中,並排除該程序集的規則。

+0

Bonner提供了正確的答案。 –

5

你的代碼更改爲以下:

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

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