Я боролся с этим в течение последних нескольких дней и не могу понять это. Я использую подход 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. Я действительно в растерянности...
Спасибо.