从虚拟集合中删除/添加内存使用情况

时间:2015-05-15 17:01:14

标签: c# ef-code-first out-of-memory entity-framework-6

从分析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)集合中移除和收集项目后,用户是否已将所有组加载到内存中?

1 个答案:

答案 0 :(得分:2)

  

执行所有用户。当从集合中移除和项目时,组件被加载到内存中user.Groups.Remove(group)?

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