2つの簡単なクラスがあります
public class User
{
public User()
{
Roles = new Collection<Role>();
}
public int UserId { get; set; }
public string UserName { get; set; }
public ICollection<Role> Roles { get; set; }
}
public class Role
{
public Role()
{
Users = new Collection<User>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public ICollection<User> Users { get; set; }
}
シードメソッドをオーバーライドして、次のデータをシードしました
var firstUser = new User {UserName = "vivekr"};
var secondUser = new User {UserName = "vivekm"};
var firstRole = new Role {RoleName = "admin"};
var secondRole = new Role {RoleName = "user"};
firstUser.Roles.Add(firstRole);
firstUser.Roles.Add(secondRole);
secondUser.Roles.Add(firstRole);
context.Users.Add(firstUser);
context.Users.Add(secondUser);
マッピングは、OnModelCreating()をオーバーライドすることによって行われます。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany<Role>(r=> r.Roles)
.WithMany(u => u.Users)
.Map(c=>
{
c.MapLeftKey("UserId");
c.MapRightKey("RoleId");
c.ToTable("UserRoles");
});
}
すべてのテーブルが正しく作成されており、値が正しいことがわかります(マッピングを含む)
しかし、私はデータをフェッチするときに問題があります
私がそうする場合(dbが私のContextクラスのインスタンスであると仮定して)
var selectedRoles = db.Users.Find(1).Roles;
selectedRolesの数を0にします。2になるはずです。なぜこれが起こっているのかわかりません。