Asp.net mvc 代码优先约定不在实体框架6.2中的多对多关系上创建联接表

Asp.net mvc 代码优先约定不在实体框架6.2中的多对多关系上创建联接表,asp.net-mvc,entity-framework,ef-code-first,many-to-many,code-first,Asp.net Mvc,Entity Framework,Ef Code First,Many To Many,Code First,我有名为YogaProfile、YogaSpace和YogaSpaceEvent的实体 它们都是。一对多(例如YogaProfile->YogaSpace->YogaSpaceEvent) 把它想象成一个学生从教室到教室的事件 仅供参考-我使用的是EF6.2,而不是EF7 我想在YogaProfile和YogaSpaceEvent之间建立一种多对多的关系。一个学生可以注册参加许多班级活动,一个班级活动可以有许多学生。我将遵循这些链接,并针对代码优先的多对多实现 但是,当我运行添加迁移时,迁移文件

我有名为YogaProfile、YogaSpace和YogaSpaceEvent的实体 它们都是。一对多(例如YogaProfile->YogaSpace->YogaSpaceEvent) 把它想象成一个学生从教室到教室的事件

仅供参考-我使用的是EF6.2,而不是EF7

我想在YogaProfile和YogaSpaceEvent之间建立一种多对多的关系。一个学生可以注册参加许多班级活动,一个班级活动可以有许多学生。我将遵循这些链接,并针对代码优先的多对多实现

但是,当我运行添加迁移时,迁移文件不包含任何联接表(例如,YogaProfileYogaSpaceEvent),并且当我更新数据库时,仍然没有联接表

下面是我的迁移文件在备份时的外观

public override void Up()
    {
        AddColumn("dbo.YogaSpaceEvents", "YogaProfile_YogaProfileId", c => c.Int());
        AddColumn("dbo.YogaProfiles", "YogaSpaceEvent_YogaSpaceEventId", c => c.Int());
        CreateIndex("dbo.YogaSpaceEvents", "YogaProfile_YogaProfileId");
        CreateIndex("dbo.YogaProfiles", "YogaSpaceEvent_YogaSpaceEventId");
        AddForeignKey("dbo.YogaSpaceEvents", "YogaProfile_YogaProfileId", "dbo.YogaProfiles", "YogaProfileId");
        AddForeignKey("dbo.YogaProfiles", "YogaSpaceEvent_YogaSpaceEventId", "dbo.YogaSpaceEvents", "YogaSpaceEventId");
    }
这是我在YogaProfile和YogaSpaceEvent上所做的

public class YogaProfile {
  public YogaProfile() {
      YogaSpaceEvents = new List<YogaSpaceEvent>();
  }
  public virtual ICollection<YogaSpaceEvent> YogaSpaceEvents { get; set; }
}

public class YogaSpaceEvents {
   public YogaSpaceEvents() {
      RegsiteredStudents = new List<YogaProfile>();
   }
   public virtual ICollection<YogaProfile> RegisteredStudents { get; set; }
}
公共类YogaProfile{
公共YogaProfile(){
YogaSpaceEvents=新列表();
}
公共虚拟ICollection事件{get;set;}
}
公开课活动{
公共活动{
RegsiteredStudents=新列表();
}
公共虚拟ICollection RegisteredStudents{get;set;}
}

尝试哈希集而不是列表:

public class YogaProfile {
  public YogaProfile() {
      YogaSpaceEvents = new HashSet<YogaSpaceEvent>();
  }
  public virtual int YogaProfileId{ get; set; }
  public virtual ICollection<YogaSpaceEvent> YogaSpaceEvents { get; set; }
}

public class YogaSpaceEvents {
   public YogaSpaceEvents() {
      RegisteredStudents = new HashSet<YogaProfile>();
   }
   public virtual int YogaSpaceEventId { get; set; }
   public virtual ICollection<YogaProfile> RegisteredStudents { get; set; }
}
公共类YogaProfile{
公共YogaProfile(){
YogaSpaceEvents=新HashSet();
}
公共虚拟整数{get;set;}
公共虚拟ICollection事件{get;set;}
}
公开课活动{
公共活动{
RegisteredStudents=new HashSet();
}
公共虚拟事件ID{get;set;}
公共虚拟ICollection RegisteredStudents{get;set;}
}
我还建议使用FluentApi显式映射实体

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<YogaProfile>()
                .HasMany<Course>(s => s.YogaSpaceEvents)
                .WithMany(c => c.RegisteredStudents )
                .Map(cs =>
                        {
                            cs.MapLeftKey("YogaProfileId");
                            cs.MapRightKey("YogaSpaceEventId");
                            cs.ToTable("YogaSpaceEventsRegisteredStudents");
                        });

}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(s=>s.YogaSpaceEvents)
.WithMany(c=>c.RegisteredStudents)
.Map(cs=>
{
cs.MapLeftKey(“YogaProfileId”);
cs.MapRightKey(“YogaSpaceEventId”);
cs.ToTable(“YogaSpaceEvents注册学生”);
});
}

您的实体上必须有PrimaryKey,那么您是否有但没有在问题中显示?我为两个实体“YogaProfileId”和“YogaSpaceEventId”的id都设置了key属性。这就是你的意思吗?在你提供的代码中没有ID属性。我是说你为了简单起见把它们去掉了吗?当我使用EF 6.2并添加您提供的代码时,添加Id属性并运行
add Migration
join table is createdya,我遗漏了很多代码,但两个实体中的两个Id都有主键作为Id。例如,YogaProfileId和YogaSpaceEventIdLet的说法不同。提供的样本代码无法再现该问题。创建新项目,添加您发布的内容并尝试复制。你能?所以我们。为了提供帮助,我们需要