entity frameworkCodeFirst与其他信息的多对多关系

我有以下型号:

class Contract { string ContractID{get;set;} ICollection Parts{get;set;} } class Part { string PartID{get;set;} ICollection Contracts{get;set;} } 

问题是Part和Contract之间的关系还包含以下附加信息:

 class ContractParts { Contract{get;set;} Part{get;set;} Date{get;set;} //additional info Price{get;set;} //additional info } 

我将如何为此编写实体上下文?

在这种情况下,您必须以这种方式为实体建模:

 public class Contract { public virtual string ContractId { get; set; } public virtual ICollection ContractParts { get; set; } } public class Part { public virtual string PartId { get;set; } public virtual ICollection ContractParts { get; set; } } public class ContractPart { public virtual string ContractId { get; set; } public virtual string PartId { get; set; } public virtual Contract Contract { get; set; } public virtual Part Part { get; set; } public virtual string Date { get; set; } //additional info public virtual decimal Price { get; set; } //additional info } 

在派生上下文中,您必须定义:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(cp => new { cp.ContractId, cp.PartId }); modelBuilder.Entity() .HasMany(c => c.ContractParts) .WithRequired() .HasForeignKey(cp => cp.ContractId); modelBuilder.Entity() .HasMany(p => p.ContractParts) .WithRequired() .HasForeignKey(cp => cp.PartId); } 

也许更好的方法是这个答案? 使用关联表中的其他字段首先创建代码,多对多创建代码

它不需要流畅的API,也可以在连接表上设置PK。