2009-11-10 9 views
19

Mi piacerebbe sapere che esiste un modo per escludere alcuni campi dal database? Ad esempio:Escludere un campo/proprietà dal database con Entity Framework 4 e Code-First

public class Employee 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string FatherName { get; set; } 

    public bool IsMale { get; set; } 
    public bool IsMarried { get; set; } 

    public string AddressAs { get; set; } 
} 

Come escludere il campo AddressAs dal database?

+0

Eventuali duplicati di [Ignorando una proprietà di classe di Entity Framework 4.1 Codice First] (http://stackoverflow.com/questions/10385248/ignoring-a-class-property-in-entity-framework-4-1-code-first) –

risposta

20

Nella versione attuale l'unico modo per escludere un immobile è di mappare in modo esplicito tutte le altre colonne:

builder.Entity<Employee>().MapSingleType(e => new { 
    e.Id, 
    e.Name, 
    e.FatherName, 
    e.IsMale, 
    e.IsMarried 
}); 

Perché AddressAs non viene fatto riferimento non è parte dell'Ente/Database.

Il team EF sta valutando l'aggiunta di qualcosa di simile:

builder.Entity<Employee>().Exclude(e => e.AddressAs); 

ti suggerisco di dire lasciare un commento sul blog EFDesign, chiedendo questa funzione :)

Spero che questo aiuti

Alex

+3

Mi sono reso conto che l'unico modo per farlo oggi è il modo in cui hai menzionato. L'ho pubblicato sul blog EFDesign molto tempo fa: http://blogs.msdn.com/efdesign/archive/2009/10/12/code-only-further-enhancements.aspx – Yogesh

+0

Sarebbe un vero bonus se aggiungessero un ' .Exclude() ' – Zapnologica

+0

Esiste un modo per escludere un particolare campo da tutte le classi in un modello usando il modello T4? –

30

So che questa è una vecchia domanda, ma nel caso qualcuno (come me) arrivi da Searc h ...

Ora è possibile farlo nel framework Entity 4.3. Si potrebbe farlo in questo modo:

builder.Entity<Employee>().Ignore(e => e.AddressAs); 
+2

Oppure in VB 'builder.Entity (Of Employee) .Ignore (Function (e) e.AddressAs)' –

+3

Questo sarebbe globale? Voglio dire, cosa succede se voglio farlo solo per questa chiamata? Posso riaccenderlo, per così dire? – vbullinger

+0

Sì ancora utile. mi hai appena salvato 40 minuti di ricerca. –

Problemi correlati