Sto usando l'approccio EF CF per un sito web con MySQL. Per qualche ragione, EF crea una colonna nella mia tabella Post chiamata "Discriminator" e contiene il "Post" VARCHAR.
Perché questa colonna è stata creata? Posso fare qualcosa per evitare che venga creato? Ci sono dei vantaggi nell'avere questa colonna?
La colonna Discriminator
viene utilizzata e richiesta negli scenari di ereditarietà Tabella-Per-Gerarchia . Se per esempio hai un modello come questo ...
public abstract class BaseEntity
{
public int Id { get; set; }
//...
}
public class Post : BaseEntity
{
//...
}
public class OtherEntity : BaseEntity
{
//...
}
... e rende la parte BaseEntity
del modello, ad esempio aggiungendo un DbSet<BaseEntity>
al tuo contesto derivato, Entity Framework DbSet<BaseEntity>
questa gerarchia di classi di default in una singola tabella, ma introdurrà una colonna speciale - il Discriminator
- per distinguere tra i diversi tipi ( Post
o OtherEntity
) memorizzati in questa tabella. Questa colonna viene popolata con il nome del tipo (di nuovo Post
o OtherEntity
).
È possibile interrompere la creazione della colonna aggiungendo l'annotazione dei dati [NotMapped]
ai modelli che ereditano dalla classe base. Questo dirà a EF di non aggiungere la tua classe a future migrazioni, rimuovendo la colonna del discriminatore.
public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass
{
}