2015-06-27 53 views
0

我是實體框架的新手。我首先使用第5版代碼。在實體框架5代碼中啓用多個到多個代碼首先到同一個表

我有一個模型:

class RebateBase 
{ 
    public int ID { get; set; } 

    public RebateType RebateType { get; set; } 

    public virtual ICollection<Customer> Customers { get; set; } 

    public virtual ICollection<TurnoverClassification> AvailableTurnoverClassifications { get; set; } 

    public virtual ICollection<TurnoverClassification> EnabledTurnoverClassifications { get; set; } 


    public RebateBase() 
    { 
     if (AvailableTurnoverClassifications == null) 
     { 
      AvailableTurnoverClassifications = new List<TurnoverClassification>(); 
     } 

     if (EnabledTurnoverClassifications == null) 
     { 
      EnabledTurnoverClassifications = new List<TurnoverClassification>(); 
     } 

     if (Customers == null) 
     { 
      Customers = new List<Customer>(); 
     } 
    } 

和模型

class TurnoverClassification 
{ 
    public string Name { get; set; } 

    public virtual ICollection<RebateBase> RebateBases{ get; set; } 

    [Key] 
    public int NumericalValue { get; set; } 
} 

我已經嘗試過使用和不使用

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 


     modelBuilder.Entity<RebateBase>() 
      .HasMany<TurnoverClassification>(rb => rb.AvailableTurnoverClassifications) 
      .WithMany(tc => tc.RebateBases) 
      .Map(rt => 
       { 
        rt.MapLeftKey("RebateID"); 
        rt.MapRightKey("TurnoverID"); 
        rt.ToTable("RebateBase_AvailableTurnoverClassifications"); 
       }); 

     modelBuilder.Entity<RebateBase>() 
      .HasMany<TurnoverClassification>(rb => rb.EnabledTurnoverClassifications) 
      .WithMany(tc => tc.RebateBases) 
      .Map(rt => 
      { 
       rt.MapLeftKey("RebateID"); 
       rt.MapRightKey("TurnoverID"); 
       rt.ToTable("RebateBase_EnabledTurnoverClassifications"); 
      }); 

初始化數據,但它不工作。隨着上的方法,我得到的錯誤:

Schema specified is not valid. Errors: (9,6) : error 0040: Type RebateBase_AvailableTurnoverClassifications is not defined in namespace CustomerConfiguration.Datalayer (Alias=Self).

當我刪除第二導航屬性enabledturnoverClassifications萬物是很好,我不需要適應在模型構建的映射。只要我添加第二個導航屬性,我會得到錯誤。

任何人都可以請幫忙嗎?

謝謝。

格爾茨

哈利

回答

0

可以使用InverseProperty屬性來指定相應的集合中的TurnoverClassification類,使多個多對多的關係。對於this的回答包含EF中多重多對多關係的示例。

我用指定的Enable-Migrations測試了這個,並創建了正確的關係表。

class RebateBase 
{ 
    public int ID { get; set; } 

    public RebateType RebateType { get; set; } 

    public virtual ICollection<Customer> Customers { get; set; } 

    [InverseProperty("RebateBasesAvailable")] 
    public virtual ICollection<TurnoverClassification> AvailableTurnoverClassifications { get; set; } 

    [InverseProperty("RebateBasesEnabled")] 
    public virtual ICollection<TurnoverClassification> EnabledTurnoverClassifications { get; set; } 


    public RebateBase() 
    { 
     if (AvailableTurnoverClassifications == null) 
     { 
      AvailableTurnoverClassifications = new List<TurnoverClassification>(); 
     } 

     if (EnabledTurnoverClassifications == null) 
     { 
      EnabledTurnoverClassifications = new List<TurnoverClassification>(); 
     } 

     if (Customers == null) 
     { 
      Customers = new List<Customer>(); 
     } 
    } 

模型

class TurnoverClassification 
{ 
    public string Name { get; set; } 

    public virtual ICollection<RebateBase> RebateBasesAvailable{ get; set; } 
    public virtual ICollection<RebateBase> RebateBasesEnabled{ get; set; } 

    [Key] 
    public int NumericalValue { get; set; } 
} 
+0

它的工作原理。非常感謝。 – Harry

相關問題