Code First MVC 4 EF 5多对多加入

时间:2012-08-30 16:52:12

标签: c# .net linq entity-framework-5

过去几天我一直在努力解决这个问题,似乎无法解决这个问题。我正在使用Code First方法与MVC 4和EF 5.我通过流畅的API建立了多对多关系。以下是示例代码:

    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 个答案:

答案 0 :(得分:1)

试试这个:

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