Ricerca…


Tabella per gerarchia

Questo approccio genererà una tabella sul database per rappresentare tutta la struttura di ereditarietà.

Esempio:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

public class Employee : Person
{
    public DateTime AdmissionDate { get; set; }
    public string JobDescription { get; set; }
}

public class Customer : Person
{
    public DateTime LastPurchaseDate { get; set; }
    public int TotalVisits { get; set; }
}

// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }

La tabella generata sarà:

Tabella: Campi di persone: Nome ID Data di nascita Discrimitatore Data di ammissione Data Descrizione del lavoro Data ultima scadenza Totale visite

Dove "Discriminator" manterrà il nome della sottoclasse sull'ereditarietà e "AdmissionDate", "JobDescription", "LastPurchaseDate", "TotalVisits" sono annullabili.

vantaggi

  • Prestazioni migliori in quanto non sono richiesti join, sebbene per molte colonne il database possa richiedere molte operazioni di paging.
  • Semplice da usare e creare
  • Facile aggiungere più sottoclassi e campi

svantaggi

Tabella per tipo

Questo approccio genererà (n + 1) tabelle sul database per rappresentare tutta la struttura di ereditarietà in cui n è il numero di sottoclassi.

Come:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

[Table("Employees")]
public class Employee : Person
{
    public DateTime AdmissionDate { get; set; }
    public string JobDescription { get; set; }
}

[Table("Customers")]
public class Customer : Person
{
    public DateTime LastPurchaseDate { get; set; }
    public int TotalVisits { get; set; }
}

// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }

La tabella generata sarà:

Tabella: Campi di persone: Nome ID Data di nascita

Tabella: Campi dipendenti: PersonId AdmissionDate JobDescription

Tabella: Clienti: Campi: PersonId LastPurchaseDate TotalVisits

Dove "PersonId" su tutte le tabelle sarà una chiave primaria e un vincolo per People.Id

vantaggi

  • Tavoli normalizzati
  • Facile aggiungere colonne e sottoclassi
  • Nessuna colonna nullable

svantaggi

  • Unire è necessario per recuperare i dati
  • L'inferenza sottoclasse è più costosa


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow