2011-05-27 51 views
1

我有一個具有多個多對多關係映射到同一個輔助類的類。我的EquipmentSet類有兩個Equipment對象陣列,Equipment類也有一個EquipmentSets陣列來確定設備屬於哪一組。EF 4.1單個類中的多個多對多關係

EF僅爲第二個多對多關係生成查找表。我如何告知EF爲兩者生成查找表?使用下面的代碼時,僅生成「ModelSpecificEquipment」表。 「GlobalEquipment」表永遠不會生成。

public partial class EquipmentSet 
{ 
    public int Id { get; set; } 
    public List<Equipment> Global { get; protected set; } 
    public List<Equipment> ModelSpecific { get; protected set; } 

    public EquipmentSet() 
    { 
     Global = new List<Equipment>(); 
     ModelSpecific = new List<Equipment>(); 
    } 
} 


public partial class Equipment 
{ 
    public int Id { get; set; } 
    public List<EquipmentSet> EquipmentSets { get; set; } 

    public Equipment() 
    { 
    } 
} 



public class DataContext : DbContext 
{ 
    public DbSet<Equipment> Equipment { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Equipment>() 
      .HasMany<EquipmentSet>(x => x.EquipmentSets) 
      .WithMany(x => x.Global) 
      .Map(x => 
      { 
       x.MapLeftKey("EquipmentId"); 
       x.MapRightKey("EquipmentSetId"); 
       x.ToTable("GlobalEquipment"); 
      }); 

     modelBuilder.Entity<Equipment>() 
      .HasMany<EquipmentSet>(x => x.EquipmentSets) 
      .WithMany(x => x.ModelSpecific) 
      .Map(x => 
      { 
       x.MapLeftKey("EquipmentId"); 
       x.MapRightKey("EquipmentSetId"); 
       x.ToTable("ModelSpecificEquipment"); 
      }); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

同樣,在這一點上EF創建數據庫僅包含3個表:EquipmentSets,設備,ModelSpecificEquipments。 GlobalEquipments缺失。

回答

1

我認爲這是不可能的。您無法將一端的兩個端點與另一端的單個端點關聯。你可能會需要像這樣:

public partial class Equipment 
{ 
    public int Id { get; set; } 
    public List<EquipmentSet> GlobalEquipmentSets { get; set; } 
    public List<EquipmentSet> ModelSpecificEquipmentSets { get; set; } 

    public IEnumerable<EquipmentSet> EquipmentSets 
    { 
     get 
     { 
      return GlobalEquipmentSets.Concat(ModelSpecificEquipmentSets); 
      // catch cases when one or both of the sets are null. 
     } 
    } 
} 

EquipmentSets是這裏唯一未映射到數據庫的只讀幫手。

然後,您可以在GlobalGlobalEquipmentSets之間創建多對多關係,並在ModelSpecificModelSpecificEquipmentSets之間創建另一個多對多關係。

+0

確定有趣。這給了我一些玩的東西..我會給它一個鏡頭。 – djmc 2011-05-27 19:13:27