0

私は過去数日間これに苦労してきましたが、これを理解できないようです. 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 アプローチでは利用できません。本当に途方に暮れています...

ありがとうございました。

4

1 に答える 1

1

これを試して:

var classesTeachers = from c in data.Classes
                      where c.Teachers.Any(t => t.Id == mockUser.Id)
                      select c;
于 2012-08-30T21:09:07.630 に答える