Лучший способ реализовать наследование таблиц в иерархии в EF Core, ASP.NET Core MVC - PullRequest
0 голосов
/ 30 июня 2018

Во время разработки моего веб-сайта я решил использовать базовый класс и извлечь из него еще 2.

Мой базовый класс

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gendre { get; set; }
    public string CityOfBirth { get; set; }
    public string ProvinceOfBirth { get; set; }
    public string FiscalCode { get; set; }

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    public DateTime DateOfBirth { get; set; }

    public Address Address { get; set; }
    public string AdditionaInfos { get; set; }

    public string CountryOfBirth { get; set; }
}

Обратите внимание, что я НЕ использовал ни одного идентификатора в своем базовом классе. Возможно, уже ошибка. Это связано с тем, что я добавил базовый класс на втором этапе и уже назначил идентификаторы производным классам.

Другие производные классы:

public class Loaner : Person
{
    public int ID { get; set; }

    public int AID { get; set; }
    public ICollection<A> A{ get; set; }

    // user ID from AspNetUser table
    public string OwnerID { get; set; }
}

и

public class Client : Person
{
    public int ID { get; set; }

    public string TypeOfLocator { get; set; } 
    public bool IsRegistered { get; set; } = false;
    public bool TakeDataFromRegistration { get; set; } = false;
    public bool WantsToBeContactedByEmail { get; set; } = false;

    [DataType(DataType.EmailAddress)]
    public string EMailAddress { get; set; }

}

Мой DbContext выглядит так:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {

    }


    public DbSet<Client> Clients { get; set; }
    public DbSet<Loaner> Loaners { get; set; }
    public DbSet<Address> Address{ get; set; }

}

Теперь, как мне лучше всего реализовать TPH, зная, что у меня нет идентификатора в моем базовом классе? Моя проблема в том, что идентификаторы производных классов уже широко используются в остальной части моего сайта.

Я посмотрел здесь , но этот подход требует наличия идентификатора в базовом классе. Мне действительно нужно создавать и настраивать код миграции? Или достаточно использовать свободный API, как описано здесь ?

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...