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
(因为 Users
和 Groups
是 DbSets
),而 groups.Users
大概是一个 ICollection<User>
。所以(假设你启用了延迟加载等)当你访问它时它会被填充。
根据我在分析 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
(因为 Users
和 Groups
是 DbSets
),而 groups.Users
大概是一个 ICollection<User>
。所以(假设你启用了延迟加载等)当你访问它时它会被填充。