2011-09-12 23 views
51

Sto utilizzando l'approccio EF CF per un sito Web con MySQL. Per qualche motivo EF crea una colonna nella mia tabella degli annunci chiamata "Discriminator" e contiene il "Post" VARCHAR.Il codice del framework Entity crea prima la colonna "discriminator"

Perché viene creata questa colonna? Posso fare qualcosa per evitare che venga creato? Ci sono dei vantaggi nell'avere questa colonna?

risposta

86

La colonna Discriminator viene utilizzata e richiesta negli scenari di ereditarietà Table-Per-Hierarchy. Se ad esempio si dispone di un modello come questo ...

public abstract class BaseEntity 
{ 
    public int Id { get; set; } 
    //... 
} 

public class Post : BaseEntity 
{ 
    //... 
} 

public class OtherEntity : BaseEntity 
{ 
    //... 
} 

... e fare la parte BaseEntity del modello, per esempio con l'aggiunta di un DbSet<BaseEntity> al vostro contesto derivato, Entity Framework mapperà questa gerarchia classe predefinito in una singola tabella, ma introdurre una colonna speciale - Discriminator - per distinguere tra i diversi tipi (Post o OtherEntity) memorizzati in questa tabella. Questa colonna viene popolata con il nome del tipo (sempre Post o OtherEntity).

+0

Grazie per la buona risposta. Tuttavia, il mio modello non è derivato. Perché EF fa ancora il discriminatore? – kasperhj

+0

@lejon: puoi mostrare il modello nella tua domanda? Non ho mai visto una colonna 'Discriminator' se non in un contesto di ereditarietà. Il mio codice sopra è solo un esempio. Si otterrebbe lo stesso, ad esempio, se "Post" stesso non è derivato, ma se ci sono altre entità derivate da "Post". – Slauma

+0

Vedo! Un altro modello derivato da Post. Grazie per aver risposto! – kasperhj

Problemi correlati