Mappare più proprietà di classi diverse usando la stessa colonna con TPH ed Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

Quando usiamo il modello di ereditarietà Table Per Hierarchy (TPH), ogni proprietà delle classi nella gerarchia viene mappata su una colonna della tabella. L'unica eccezione a questa regola è costituita dalla proprietà che rappresenta la chiave primaria in quanto questa è in comune tra tutte le entità. Esistono casi in cui classi diverse hanno proprietà identiche per nome, tipo e dimensione; in questi casi possiamo decidere di mappare queste proprietà verso una sola colonna risparmiando così una colonna nella definizione della tabella.

public class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Manager>()
            .Property(b => b.Name)
            .HasColumnName("Name");

        modelBuilder.Entity<Employee>()
            .Property(b => b.Name)
            .HasColumnName("Name");
    }
}

public abstract class Person
{
    public int Id { get; set; }
}

public class Manager : Person
{
    public string Name { get; set; }
}

public class Employee : Person
{
    public string Name { get; set; }
}

In questo caso, viene creata la tabella People che invece di avere una colonna Employee_Name e una colonna Manager_Name, avrà una sola colonna Name che sarà sfruttata sia che il record appartenga al tipo Manager, sia che appartenga al tipo Employee.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi