使用代码第一流畅的api连接具有复合键的表

时间:2015-09-08 11:56:17

标签: c# entity-framework ef-fluent-api

我有两个实体:

    //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具有产品复合键的所有属性。

1 个答案:

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