Entity Framework
Arv med EntityFramework (kod först)
Sök…
Tabell per hierarki
Detta tillvägagångssätt genererar en tabell i databasen för att representera alla arvstrukturen.
Exempel:
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; }
Den genererade tabellen är:
Tabell: Människor Fält: Id-namn FödelseDatum Diskriminerare AntagningDatum Jobb Beskrivning Sista KöpDatum Totalt Besök
Där 'Diskriminator' kommer att innehålla namnet på underklassen på arvet och 'AdmissionDate', 'JobDescription', 'LastPurchaseDate', 'TotalVisits' är nollbara.
fördelar
- Bättre prestanda eftersom inga sammanfogningar krävs, även om databasen för många kolumner kan kräva många sökningsåtgärder.
- Enkelt att använda och skapa
- Lätt att lägga till fler underklasser och fält
nackdelar
- Bryter mot den tredje normala formen Wikipedia: Tredje normalform
- Skapar massor av nollbara fält
Tabell per typ
Detta tillvägagångssätt kommer att generera (n + 1) tabeller i databasen för att representera alla arvstrukturen där n är antalet underklasser.
Hur:
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; }
Den genererade tabellen är:
Tabell: Folkfält: Id-namn Födelsedatum
Tabell: Anställdes fält: PersonId AdmissionDate JobBeskrivning
Tabell: Kunder: Fält: PersonId LastPurchaseDate TotalVisits
Där 'PersonId' på alla tabeller kommer att vara en primär nyckel och en begränsning för People.Id
fördelar
- Normaliserade tabeller
- Lätt att lägga till kolumner och underklasser
- Inga nollbara kolumner
nackdelar
- Gå med krävs för att hämta data
- Underklassklassstörning är dyrare