2014-07-23 9 views
6

Auto classe generata da EntityFramework 6.1:Database prima classe automatico provoca CA2214: Non chiamare i metodi overridable nei costruttori

public partial class STUDENT 
{ 
    public STUDENT() 
    { 
     this.STUDENT_GROUPS = new HashSet<STUDENT_GROUPS>(); 
    } 
    public int ID { get; set; } 
    public int PERSON { get; set; } 
    ... 
    public virtual ICollection<STUDENT_GROUPS> STUDENT_GROUPS { get; set; } 
    ... 
} 

E STUDENT_GROUPS:

public partial class STUDENT_GROUPS 
{ 
    public int ID { get; set; } 
    public int GROUPS_GRP { get; set; } 
    public int STUDENT { get; set; } 

    public virtual STUDENT STUDENT1 { get; set; } 
    public virtual GROUPS_GRP GROUPS_GRP1 { get; set; } 
} 

getta un CA2214: Non chiamare i metodi Overridable nei costruttori, ma dal momento che questo è un codice generato automaticamente, penso che non dovrei cambiarlo, come dovrei avvicinarmi a questo scenario? Grazie in anticipo

+4

Come può essere il codice prima se qualcos'altro sta generando il codice? – DavidG

+0

Inoltre, questo ovviamente non è l'intero codice per la classe, dal momento che non possiamo vedere la proprietà 'STUDENT_GROUPS' - dove è definito? –

+0

@DavidG in realtà EntityFramework ha generato le classi dal database esistente. – Juanito

risposta

5

Il codice che hai postato non sta generando un errore, sta solo violando una regola di analisi del codice e funzionerà correttamente. Il codice generato è corretto e di progettazione per consentire il caricamento lazy. Dovresti sopprimere questo avviso per quei file.

+0

grazie lo farà – Juanito

+0

I Sto avendo anche questo problema e sopprimere l'avviso non è un'opzione perché il mandato aziendale è che non ci possono essere avvertenze critiche in FxCop. C'è un'altra soluzione? – chill182

+1

Mi spiace di non aver trovato alcuna soluzione a questo, quello che devo fare è configurare il progetto con "Regole minime raccomandate di Microsoft", l'ho fatto perché quelle classi sono codice generato dal framework entità, qui alcune spiegazioni sull'analisi del codice http : //visualstudiomagazine.com/articles/2010/04/27/static-code-analysis-configuration.aspx – Juanito

1

In questo caso, è possibile ignorare l'avviso, ma se si desidera evitarlo, è possibile impostare manualmente un campo privato per ogni proprietà virtuale (e setter/getter manualmente anche). Quindi, nel costruttore, imposta il campo privato, non la proprietà. In questo modo, non si esegue mai il setter di una proprietà virtuale all'interno del costruttore, che è il motivo dell'avviso.

Problemi correlati