据我分析 sql 时所知,它会在调用 group.Users.Remove(user)
时执行一条 sql 语句来检索该组的所有用户。 Users 是组上的虚拟集合,首先使用 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)
的集合中删除和项目时,是否所有用户组都加载到内存中?
最佳答案
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
)将返回 IQueryable
(因为 Users
和 Groups
是 DbSets
),而 groups.Users
大概是 ICollection<User>
.因此(假设您启用了延迟加载等)它会在您访问时填充。
关于c# - 从虚拟集合中删除/添加内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264991/