私は過去数日間これに苦労してきましたが、これを理解できないようです. MVC 4 および EF 5 で Code First アプローチを使用しています。流暢な 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 };
ただし、正しいデータが返されません。通常、必要な結果を取得するために間に結合できる 3 番目のテーブルがありますが、これは EF Code First アプローチでは利用できません。本当に途方に暮れています...
ありがとうございました。