从分析sql时我可以看出,它在调用group.Users.Remove(user)
时执行sql语句来检索该组的所有用户。用户是组中的虚拟集合,首先使用Entity Framework 6代码。
var usersToRemove = Context.users.Where(u=>someListOfIds.Contains(u.Id)); //might only be a few users
foreach(var group in Context.groups)
{
foreach(var user in usersToRemove.Where(u=>u.groupId == group.Id)){
group.Users.Remove(user);//group.Users might have millions of users, do all users get pulled back into memory at this point?
}
}
我的问题是,在从group.Users.Remove(user)
集合中移除和收集项目后,用户是否已将所有组加载到内存中?
答案 0 :(得分:2)
执行所有用户。当从集合中移除和项目时,组件被加载到内存中user.Groups.Remove(group)?
是的,我认为调用group.Users
将加载所有用户。调用context.Users
(或context.Groups
)会返回IQueryable
(因为Users
和Groups
是DbSets
),而groups.Users
是大概是ICollection<User>
。所以(假设您启用了延迟加载等),当您访问它时,它将被填充。