この質問は次の続きです。
コレクションに新しいオブジェクトを追加するEntityFramework
DbSet
これで、 EF を使用するとコレクション全体がメモリに読み込まれないことがわかりました
しかし、次のコードのようなものがあるとしたらどうでしょうか:
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public ICollection<Role> Roles { get; set; }
}
public class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; }
public User User { get; set; }
}
public class MyContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
public class SomeClass
{
public void AssignRoleToUser(int userID, Role role)
{
var ctx = new MyContext();
var user = ctx.Users.First(x => x.UserID.Equals(userID));
user.Roles.Add(role);
ctx.SaveChanges();
}
}
この場合、オブジェクトを使用してRoleDbSet
コレクションに新しいオブジェクトを追加するのではなく、コレクションを使用して特定のユーザーに新しい役割を追加しています。ICollection
では、この場合はどうなるでしょうか。
挿入を実行するために、EntityFramewrk はすべてのユーザーのロールをメモリにロードする必要がありますか?