Suche…


Tabelle pro Hierarchie

Dieser Ansatz generiert eine Tabelle in der Datenbank, die die gesamte Vererbungsstruktur darstellt.

Beispiel:

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; }

Die generierte Tabelle wird sein:

Tabelle: Personen Felder: ID Name Geburtsdatum Discrimitator ZulassungDatum JobDescription LastPurchaseDate Gesamtbesichtigungen

Wo 'Discriminator' den Namen der Unterklasse für die Vererbung enthält und 'AdmissionDate', 'JobDescription', 'LastPurchaseDate', 'TotalVisits' sind nullbar.

Vorteile

  • Bessere Leistung, da keine Joins erforderlich sind, obwohl die Datenbank für viele Spalten viele Paging-Vorgänge erfordern kann.
  • Einfach zu bedienen und zu erstellen
  • Einfach weitere Unterklassen und Felder hinzufügen

Nachteile

Tabelle pro Typ

Dieser Ansatz generiert (n + 1) Tabellen in der Datenbank, um die gesamte Vererbungsstruktur darzustellen, wobei n die Anzahl der Unterklassen ist.

Wie man:

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; }

Die generierte Tabelle wird sein:

Tabelle: Personenfelder: Id-Name Geburtsdatum

Tabelle: Mitarbeiterfelder: PersonId AdmissionDate JobDescription

Tabelle: Kunden: Felder: PersonId LastPurchaseDate Gesamtbesichtigungen

Wobei 'PersonId' in allen Tabellen ein Primärschlüssel und eine Einschränkung für People.Id ist

Vorteile

  • Normalisierte Tabellen
  • Spalten und Unterklassen einfach hinzuzufügen
  • Keine nullfähigen Spalten

Nachteile

  • Join ist erforderlich, um die Daten abzurufen
  • Unterklassenschluss ist teurer


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow