EF 4.1单个类中有多个对多关系

我有一个具有多个多对多关系的类,它们映射到同一辅助类。我的EquipmentSet类具有两个Equipment对象数组,而Equipment类还具有一个EquipmentSets数组,以确定设备属于哪个集合。 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,Equipments,ModelSpecificEquipments。 GlobalEquipments丢失。     
已邀请:
        我认为这是不可能的。您不能将关系的一侧的两个端点关联到关系的另一侧的一个端点。您可能需要这样的东西:
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
只是一个只读的帮助程序,未映射到数据库。 然后,您可以在
Global
GlobalEquipmentSets
之间创建多对多关系,并在
ModelSpecific
ModelSpecificEquipmentSets
之间创建另一个多对多关系。     

要回复问题请先登录注册