2012-06-21 2 views
5

una relazione uno-molti o molti-molti in Entity Framework Codice Primo aspetto: -Entity Framework Codice Primo e CA2227 "Proprietà della raccolta deve essere letto solo"

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

Questo viola regola analisi del codice 2227 " Le proprietà della raccolta devono essere di sola lettura ".

Rendere il setter protetto non aiuta, e rendendolo privato: -

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

poi, naturalmente, viola CA1811 "Foo.Bars.set (ICollection < Bar>) sembra non avere pubblico a monte oa chiamanti protetti ".

Preferisco non disattivare la regola a livello globale perché la situazione che esiste per prevenire è abbastanza importante, ma sopprimerla localmente ogni volta che voglio dichiarare una relazione sembra off. C'è un modo per dichiarare la relazione che non viola CA2227?

+0

stavo avendo lo stesso identico problema. Dopo che non ho trovato alcuna soluzione ragionevole, ho deciso che SuppressMessage() è forse il modo più pragmatico per andare. – theDmi

risposta

4

Inserire tutte le entità del codice prima nel proprio assieme ed escludere la regola per quell'assieme.

+0

La risposta corretta viene fornita da Bonner. –

5

modificare il codice al seguente:

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

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