2012-08-30 33 views
0

過去幾天我一直在爲此苦苦掙扎,似乎無法解決這個問題。我在MVC 4和EF 5中使用Code First方法。我通過流暢的API設置了多對多關係。下面是示例代碼:Code First MVC 4 EF 5多對多加入

public class Class 
    { 
     public Class() 
     { 
      Teachers = new List<User>(); 
     } 
     /// <summary> 
     /// Unique ID in the system 
     /// </summary> 
     [Key] 
     public long Id { get; set; } 

     /// <summary> 
     /// Array of users (Teachers and Interventionists) associated with that class 
     /// </summary> 
     public List<User> Teachers { get; set; } 
    } 

用戶等級:

public class User 
{ 
    public User() 
    { 

    } 
    /// <summary> 
    ///  Unique Id in the system 
    ///</summary> 
    [Key] 
    public long Id { get; set; } 

    public List<Class> Classes { get; set; } 
} 

流利的API是在這裏:

modelBuilder.Entity<Class>().HasMany(m => m.Teachers).WithMany(t => t.Classes).Map(m => 
      { 
       m.ToTable("ClassTeachers"); 
       m.MapLeftKey("ClassId"); 
       m.MapRightKey("UserId"); 
      }); 

這是怎麼回事:

的EF是創建ClassTeachers表和當我選擇所有我按預期收到數據的類時。類在返回的數據中有正確的教師。

我需要什麼幫助:

我試圖返回所有具有特定教師類。我正在嘗試這樣的事情:

var classesTeachers = 
     from classes in data.Classes from u in data.Users 
     where u.Id == mockUser.Id 
     select new { classes.Id, classes.Label, u.FirstName }; 

但是,我沒有找回正確的數據。通常情況下,我可以加入第三張表格以獲得所需的結果,但是,EF Code First方法不適用此表格。我真的很茫然......

謝謝。

回答

1

試試這個:

var classesTeachers = from c in data.Classes 
         where c.Teachers.Any(t => t.Id == mockUser.Id) 
         select c; 
+0

也做到了,非常感謝! – user1038280