2013-03-21 61 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