Código del marco de la entidad: primera relación de muchos a muchos con información adicional

Tengo el siguiente modelo:

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

el problema es que la relación entre Parte y Contrato también contiene la siguiente información adicional:

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

¿Cómo escribiría el contexto de la entidad para esto?

En tal caso, debe modelar sus entidades de esta manera:

 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 } 

En contexto derivado debe definir:

 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); } 

Tal vez una mejor manera de hacerlo es esta respuesta? Crear código primero, muchos a muchos, con campos adicionales en la tabla de asociación

No requiere API fluidas y también establece PK en la tabla de unión.