2013-03-21 60 views
2

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

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)。但问题是这个表没有被填充相应表中的键。它是空白的。任何人都可以请帮助我,我怎么能弄明白?

谢谢。

+0

我们能否在您尝试保存课程/模块的地方看到您的代码? – Seany84 2013-03-21 15:19:22

+0

可能相关,但您的POCO类中的* all *属性应该定义为'vitual',以便实体框架为它们生成代理类。请参阅http://msdn.microsoft.com/en-us/library/vstudio/dd468057(v=vs.100).aspx – 2013-03-21 16:33:41

+0

这是否有任何更新? – Seany84 2013-03-28 16:46:02

回答

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

而且,可以看到你们的代码,你尝试保存课程/模块?

+0

在我的上下文中除了两个DbSet以外没有其他内容。是的,我正在使用以下内容:modelBuilder.Entity () .HasMany(c => c.Modules).WithMany(i => i.Courses) .Map(t => t.MapLeftKey(“CourseID”) .MapRightKey(“ModuleID”) .ToTable(“CourseModule”)); – Curious 2013-03-21 15:36:16

+0

我会尽力实现我上面提供的代码。显然,将它们与您的设置不匹配的属性/类名替换。即CourseID,ModuleID等。 – Seany84 2013-03-21 15:37:57

+0

CourseModule正在创建,但没有数据进入它,但其他表被填充。课程和模块是单独的表格。 – Curious 2013-03-21 15:39:17