Entity Framework
Dziedziczenie z EntityFramework (najpierw kod)
Szukaj…
Tabela według hierarchii
To podejście wygeneruje jedną tabelę w bazie danych, która będzie reprezentować całą strukturę dziedziczenia.
Przykład:
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; }
Wygenerowana tabela będzie:
Tabela: Osoby Pola: Identyfikator Data urodzenia Data Dyskryminacja Wstęp Wstęp Data pracy Opis LastPurchaseDate TotalVisits
Gdzie „Discriminator” będzie nosił nazwę podklasy dziedziczenia, a „AdmissionDate”, „JobDescription”, „LastPurchaseDate”, „TotalVisits” są zerowane.
Zalety
- Lepsza wydajność, ponieważ nie są wymagane sprzężenia, chociaż dla wielu kolumn baza danych może wymagać wielu operacji stronicowania.
- Prosty w użyciu i tworzeniu
- Łatwo dodać więcej podklas i pól
Niedogodności
- Narusza trzecią normalną formę Wikipedia: Trzecia normalna forma
- Tworzy wiele zerowalnych pól
Tabela według rodzaju
Podejście to wygeneruje (n + 1) tabele w bazie danych, aby reprezentować całą strukturę dziedziczenia, gdzie n jest liczbą podklas.
Jak:
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; }
Wygenerowana tabela będzie:
Tabela: Pola ludzi: Id Nazwa Data urodzenia
Tabela: Pola pracowników: PersonId AdmissionDate JobDescription
Tabela: Klienci: Pola: PersonId LastPurchaseDate TotalVisits
Gdzie „PersonId” na wszystkich stołach będzie kluczem podstawowym i ograniczeniem dla People.Id
Zalety
- Znormalizowane tabele
- Łatwe dodawanie kolumn i podklas
- Brak zerowalnych kolumn
Niedogodności
- Do pobrania danych wymagane jest dołączenie
- Wnioskowanie podklas jest droższe