首页 > 解决方案 > 实体框架代码优先:多个一对多

问题描述

我首先使用 EF 代码并希望创建这样的结构,例如:

  1. 有“发票”模型
  2. 我们还有其他实体,如客户、客户等,它们可能有发票列表

基本上这种关系是一对多的。一张发票只能属于客户或客户等

我想将所有发票存储在同一个表中,因为所有发票都是相同的模型,并且使用流利的 api 想要创建关系表

下面这样的事情适用于多对多:

modelBuilder.Entity<Client>()
             .HasMany(c => c.Invoice).WithMany(i => Clients)
             .Map(t => t.MapLeftKey("ClientID")
                 .MapRightKey("InvoiceID")
                 .ToTable("ClientInvoices"));

modelBuilder.Entity<Customer>()
             .HasMany(c => c.Invoice).WithMany(i => Customer)
             .Map(t => t.MapLeftKey("CustomerID")
                 .MapRightKey("InvoiceID")
                 .ToTable("CustomerInvoices"));

我怎样才能做到一对多?如何有 2 个表来存储 ClientInvoices 、 CustomerInvoices ?

标签: entity-frameworkcode-firstjunction-table

解决方案


相互声明具有导航属性的两个类。在其主键上使用 ForeignKey 属性标记其中一个表(从属表)。EF 从中推断出一对多:

public class Customer
{
    public int Id { get; set; }
    ...
    public List<Invoice> Invoices{ get; set; }
    ...
}
public class Invoice
{
   public int Id { get; set; }

   ...
   [ForeignKey("Customer")]
   public int CustomerId { get; set; }

   public Customer Customer { get; set; }
}

推荐阅读