我有两个实体:
//Product (all properties is the composite key)
public string Id {get; set;}
public string CompanyName {get; set;}
//ProductDescriptions (All properties is the composite key)
public string ProductId {get; set;}
public string CompanyName {get; set;}
public string Language {get; set;}
所以每个entites中的所有属性都是复合键。 我想要做的是使用代码第一流畅的api mapp产品到使用导航属性的productdescriptions。 我尝试了很多不同的方法,使用WithMany,WithOptionl,HasMany,HasOptional函数将产品与产品描述或其他方式进行对比。 产品可以有许多产品描述,每个产品描述需要有一个产品。
我还在某处读过你需要从另一个实体中的复合键获得所有属性,以便首先使用代码映射它。 因此,在这种情况下,由于产品实体不包含语言属性,因此我无法在带有productdescriptions的产品中拥有导航属性。
但是可以用其他方式映射它吗?由于productdescription具有产品复合键的所有属性。
答案 0 :(得分:0)
在编写下面的代码之前,请配置您的模型(导航属性等)。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ProductDescriptions >()
.HasKey(c => new {c.ProductId , c.CompanyName , c.Language });
modelBuilder.Entity<Product >()
.HasKey(c => new {c.Id , c.CompanyName });
modelBuilder.Entity<Product>()
.HasRequired(p => p.ProductDescriptions )
.WithMany(c => c.Product)
.HasForeignKey(p => new {c.CompanyName , c.Id });
}