实体框架核心TPH继承2与其他模型有关的子类

时间:2020-08-15 17:09:09

标签: asp.net-core .net-core entity-framework-core

我正在使用Entity Framework Core开发Asp.Net Core 3应用程序。

我在继承方面遇到问题,不确定如何完成所需的工作。

我的模特:

public abstract class Person
{
   public int Id {get; set;}
   public string name {get; set;}
}

public class Renter: Person
{
   public string address{get; set;}
   public ICollection<Invoice> Invoices{get;set;}
}

public class UserProfile: Person
{
   public string BankAccount {get;set;}
   public ICollection<Invoice> Invoices{get;set;}
}

public class Invoice
{
   public DateTime Date {get;set;}

   public Renter Renter {get; set;}
   
   [Required]
   public int RenterId {get; set;}

   public UserProfile UserProfile{get; set;}
   
   [Required]
   public int UserProfileId {get; set;}
}

现在我得到一个数据库异常:外键约束失败:RenterId引用Person.Id。 我可以使用Fluent Api手动配置安装程序吗? 问题在于,发票需要一个Renter和一个UserProfile,但是Person.Id是Renter和UserProfile的主键。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用流畅的API。假设您正在使用每种类型的表格(TPT):

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Renter>().ToTable("Renter");
  modelBuilder.Entity<UserProfile>().ToTable("UserProfile");
}

请参阅:https://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx