2015-09-08 71 views
0

複合鍵接表我有2個實體:使用第一代碼流暢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來使用導航屬性將產品映射到產品描述。 我嘗試了很多不同的方式使用WithMany,withOptionl,HasMany,HasOptional函數來將產品映射到產品描述或其他方式。 產品可以有很多產品描述,每個產品描述需要有一個產品。

我還在某處閱讀過,您需要在其他實體中使用複合鍵的所有屬性才能使用代碼先映射它。 因此,在這種情況下,由於產品實體不包含語言屬性,因此我無法在productdescription中使用導航屬性。

但是,是否有可能以另一種方式映射它?由於產品描述具有產品複合關鍵字的所有屬性。

回答

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 }); 
    } 
相關問題