Поиск…


Таблица на иерархию

Этот подход будет генерировать одну таблицу в базе данных для представления всей структуры наследования.

Пример:

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

Созданная таблица будет выглядеть следующим образом:

Таблица: Люди Поля: Идентификатор Имя Дата рождения Дискримитратор Входная плата JobDescription LastPurchaseDate TotalVisits

Если «Дискриминатор» будет содержать имя подкласса в наследовании, а «AdmissionDate», «JobDescription», «LastPurchaseDate», «TotalVisits», являются нулевыми.

преимущества

  • Лучшая производительность, поскольку соединения не требуются, хотя для многих столбцов для базы данных может потребоваться много операций подкачки.
  • Простой в использовании и создании
  • Легко добавлять дополнительные подклассы и поля

Недостатки

Таблица на тип

Этот подход будет генерировать (n + 1) таблицы в базе данных для представления всей структуры наследования, где n - количество подклассов.

Как:

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

Созданная таблица будет выглядеть следующим образом:

Таблица: Люди Поля: Идентификатор Имя Дата рождения

Таблица: Поля сотрудников: PersonId AdmissionDate JobDescription

Таблица: Клиенты: Поля: PersonId LastPurchaseDate TotalVisits

Где «PersonId» на всех таблицах будет основным ключом и ограничением для People.Id

преимущества

  • Нормализованные таблицы
  • Легко добавлять столбцы и подклассы
  • Нет нулевых столбцов

Недостатки

  • Для получения данных требуется соединение
  • Вывод подкласса более дорогой


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow