【问题标题】:Many to Many Relationship in EntityFramework and MVCEntityFramework 和 MVC 中的多对多关系
【发布时间】:2013-03-21 14:56:04
【问题描述】:

我在我的 MVC 项目中使用 Code First 方法。为简单起见,我有两个classes CourseModules,其中实体之间存在多对多关系。这是我的类的结构

 public class Course
    {
        public int CourseId { get; set; }                  
        public string Title { get; set; }

        public virtual ICollection<Module> Modules { get; set; 
}

public class Module
    {
        public int ModuleId { get; set; }                 
        public string Title { get; set; }
        public int Credits { get; set; }

        public virtual ICollection<Course> Courses {get;set;   
 }

我使用 EntityFramework 为每个控制器创建了两个控制器,其中每个控制器为每个类创建表。现在有了多对多关系,EF 足够聪明,可以为我创建第三个连接表,即。 CourseModule(FK_Course_ID, FK_ModuleID)。但问题是该表没有填充各个表中的键。它是空白的。谁能帮我解决一下?

谢谢。

【问题讨论】:

  • 我们可以在您尝试保存课程/模块的位置查看您的代码吗?
  • 可能相关,但您的 POCO 类上的 所有 属性应定义为 vitual,以便实体框架为它们生成代理类。见msdn.microsoft.com/en-us/library/vstudio/…
  • 这方面有更新吗?

标签: asp.net-mvc entity-framework


【解决方案1】:

我在这里很吃力,但你有以下内容吗? 上下文类:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
       base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Course>()
                .HasMany(s => s.Modules)
                .WithMany(a => a.Courses)
                .Map(m =>
                {
                    m.MapLeftKey("CourseID");
                    m.MapRightKey("ModuleID");
                    m.ToTable("CourseModules");
                });
}

另外,我们可以在您尝试保存课程/模块的位置查看您的代码吗?

【讨论】:

  • 在我的上下文中,除了上述两个 DbSet 之外,没有其他任何东西。是的,我正在使用以下内容: modelBuilder.Entity() .HasMany(c => c.Modules).WithMany(i => i.Courses) .Map(t => t.MapLeftKey("CourseID") 。 MapRightKey("ModuleID") .ToTable("CourseModule"));
  • 我会尝试实现我上面提供的代码。显然,替换与您的设置不匹配的属性/类名称。即 CourseID、ModuleID 等。
  • CourseModule 正在创建中,但未向其中创建数据,尽管填充了其他表。课程和模块是单独的表格。
  • 我没有使用任何我自己的代码来保存数据。它是我添加控制器时创建的默认值。我没碰过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2013-01-25
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多