在LINQ to SQL中,我可以这样做:
context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));
实体框架的等价物是什么?
发布于 2012-03-19 02:43:47
@Femaref有一个正确的想法,但是为了真正类似于L2E的DeleteAllOnSubmit
,你会希望你的扩展方法在枚举之前创建一个被删除实体的副本,这样你就不会得到“枚举时修改集合”的异常。
public static void DeleteAllObjects<TEntity>(this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class {
foreach(var entity in data.ToList()) //data.ToList() makes a copy of data for safe enumeration
set.DeleteObject(entity);
}
发布于 2011-01-10 03:32:46
foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId))
{
context.User_Roles.DeleteObject(entity);
}
context.SaveChanges();
当然,您可以编写一个扩展方法,它将封装这一点。
这可能是这样的:
public static void DeleteObjects<TEntity> (this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class
{
foreach(var entity in data)
set.DeleteObject(entity);
}
调用方式如下:
context.User_Roles.DeleteObjects(context.User_Roles.Where(ur => ur.UserId == user.UserId))
context.SaveChanges();
发布于 2011-10-09 00:21:24
foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId))
{
context.User_Roles.DeleteObject(entity);
}
context.SaveChanges();
当然,这个解决方案是可行的。但是,这是最低效的解决方案。此解决方案将为每个记录(实体)生成一个delete SQL命令。假设您想要删除2000年之前的所有数据。数据库中有超过1,000,000条记录。如果以这种方式删除这些对象,将有100多万条SQL命令被发送到服务器,这是一种不必要的巨大浪费。什么
https://stackoverflow.com/questions/4641251
复制相似问题