Visual studio 2017 在EF Core、ASP.NET Core MVC中实现逐层次表继承的最佳方法

Visual studio 2017 在EF Core、ASP.NET Core MVC中实现逐层次表继承的最佳方法,visual-studio-2017,asp.net-core-mvc,entity-framework-core,Visual Studio 2017,Asp.net Core Mvc,Entity Framework Core,在我的网站开发过程中,我决定使用一个基类,并从中派生出另外两个 我的基础课是 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 Provi

在我的网站开发过程中,我决定使用一个基类,并从中派生出另外两个

我的基础课是

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; }
}
请注意,我在基类中没有使用任何ID。也许已经是个错误了。这是因为我在第二步中添加了基类,并且在将ID分配给派生类之前已经分配了基类

其他派生类包括:

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

}
公共类MyDbContext:DbContext
{
公共MyDbContext(DbContextOptions):基本(选项)
{
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
}
公共数据库集客户端{get;set;}
公共DbSet借贷者{get;set;}
公共DbSet,但这种方法需要在基类上具有ID。
我真的需要创建和定制迁移代码吗?或者像上面描述的那样使用fluent API就足够了吗


非常感谢您的帮助。

从派生类中删除ID并将其放入基类应该不会有问题。但是“派生类的ID已经在我网站的其余部分广泛使用”让我觉得对TPH来说可能太晚了-TPH是一个单表,而据我所知,您已经有了单独的表。和重复的ID。因此,将它们整合到一个单表中,特别是如果有引用它们的FK,这不是一个简单的任务,需要您使用SQL手动编写整个逻辑。我真的不明白什么问题是TPH是否真的是一种优势。我仍在设计我的网站;改变结构将是一项艰巨的工作,我知道,但如果有必要,我会这样做。如果我实施TPH,我怎么能引用客户ID或借贷者ID?它会变得更复杂吗?
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; }

}