Remove/adding 来自虚拟集合内存使用

Remove/adding from virtual collections memory usage

根据我在分析 sql 时所知道的情况,它会在调用 group.Users.Remove(user) 时执行 sql 语句来检索该组的所有用户。 users是一个虚拟集合上的组,使用Entity Framework6代码优先。

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)

do all the users.Groups get loaded into memory when removing and item from the collection here user.Groups.Remove(group)?

是的,我认为调用 group.Users 加载所有用户。调用 context.Users(或 context.Groups)会 return 一个 IQueryable(因为 UsersGroupsDbSets),而 groups.Users 大概是一个 ICollection<User>。所以(假设你启用了延迟加载等)当你访问它时它会被填充。