实体框架代码优先:一对多

时间:2018-07-27 10:07:25

标签: entity-framework code-first junction-table

我首先使用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?

1 个答案:

答案 0 :(得分:0)

相互声明两个具有导航属性的类。在其主键上用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; }
}