私は次のようなコンテキストを持っています:
public DbSet<User> Users { get; set; }
public DbSet<AccessGroup> AccessGroups { get; set; }
public DbSet<UserAccessGroup> UsersAccessGroups { get; set; }
データベースには3つのテーブルがあります。
- ユーザー[Pk=Id、...]
- AccessGroups [Pk = Id、...]
- UsersAccessGroups [Pk = Id、Fk = UserId、Fk = AccessGroupId、...](作成者と作成者の列もあります)
3つのクラスがあります。
public class User
{
public virtual int Id { get; set; }
public virtual ICollection<UserAccessGroup> UsersAccessGroups { get; set; }
// Some more..
}
public class AccessGroup
{
public virtual int Id { get; set; }
public virtual ICollection<UserAccessGroup> UsersAccessGroups { get; set; }
// Some more..
}
[Table("UsersAccessGroups")]
public class UserAccessGroup
{
public virtual int Id { get; set; }
public virtual int UserId { get; set; }
public virtual int AccessGroupId { get; set; }
public virtual int CreatedByUserId { get; set; }
public virtual DateTime CreatedAt { get; set; }
public virtual User User { get; set; }
public virtual AccessGroup AccessGroup { get; set; }
public virtual User CreatedByUser { get; set; }
}
次のようなユーザーオブジェクトを使用できるようにしたいと思います。
var user = Context.Users.Select(x => x);
var accessGroup = user.UsersAccessGroups.Select(x => x.AccessGroup).ToList();
ただし、2行目は機能しません。「無効な列名User_Id」というエラーが表示されます。1対1の関係(CreatedByUserなど)がある場合も同じコードが機能します。
私もこのようなことを試しました:
Context.Users.Include("UsersAccessGroups")
.Include("UsersAccessGroups.AccessGroup")
.Include("UsersAccessGroups.User").Select(...);
しかし、私は同じ問題を抱えています。
これを機能させることは可能ですか、それともどういうわけか別の方法で行う必要がありますか?