it-swarm.it

Il codice del framework dell'entità crea prima la colonna "discriminatore"

Sto usando l'approccio EF CF per un sito Web con MySQL. Per qualche motivo EF crea una colonna nella mia tabella Post denominata "Discriminator" e contiene il "Post" VARCHAR.

Perché viene creata questa colonna? Posso fare qualcosa per evitarlo? Ci sono dei vantaggi nell'avere questa colonna?

65
kasperhj

La colonna Discriminator viene utilizzata e richiesta negli scenari di ereditarietà Tabella per gerarchia . Se ad esempio hai un modello come questo ...

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

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

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

... e rendi BaseEntity parte del modello, ad esempio aggiungendo un DbSet<BaseEntity> al contesto derivato, Entity Framework mapperà questa gerarchia di classi per impostazione predefinita in una singola tabella, ma introdurrà una colonna speciale - Discriminator - per distinguere tra i diversi tipi (Post o OtherEntity) archiviato in questa tabella. Questa colonna viene popolata con il nome del tipo (di nuovo Post o OtherEntity).

108
Slauma

Puoi interrompere la creazione della colonna aggiungendo [NotMapped] annotazione dei dati ai modelli che ereditano dalla tua classe base. Questo dirà a EF di non aggiungere la tua classe alle migrazioni future, rimuovendo la colonna del discriminatore.

public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass 
{
}
5