代码第一个约定不在实体框架6.2中的多对多关系上创建连接表

问题描述 投票:-2回答:1

我有一些名为YogaProfile,YogaSpace和YogaSpaceEvent的实体,它们都是。一对多(例如,YogaProfile-> YogaSpace-> YogaSpaceEvent)把它想象成一个学生到教室,一个课堂活动。

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

我想在YogaProfile和YogaSpaceEvent之间创建一个多对多的关系。恩。学生可以注册许多课堂活动,课堂活动可以有很多学生。我正在关注这些链接herehere以获取代码首次多对多实现

但是当我运行add-migration时,迁移文件不包含任何连接表(例如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; }
}
asp.net-mvc entity-framework ef-code-first many-to-many code-first
1个回答
0
投票

尝试HashSet而不是List:

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; }
}

而且我建议使用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");
                        });

}
© www.soinside.com 2019 - 2024. All rights reserved.