首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架提交时全部删除

实体框架提交时全部删除
EN

Stack Overflow用户
提问于 2011-01-10 03:30:36
回答 5查看 15.9K关注 0票数 18

在LINQ to SQL中,我可以这样做:

代码语言:javascript
复制
context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));

实体框架的等价物是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-19 02:43:47

@Femaref有一个正确的想法,但是为了真正类似于L2E的DeleteAllOnSubmit,你会希望你的扩展方法在枚举之前创建一个被删除实体的副本,这样你就不会得到“枚举时修改集合”的异常。

代码语言:javascript
复制
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);
}
票数 5
EN

Stack Overflow用户

发布于 2011-01-10 03:32:46

代码语言:javascript
复制
foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId))
{
  context.User_Roles.DeleteObject(entity);
}
context.SaveChanges();

当然,您可以编写一个扩展方法,它将封装这一点。

这可能是这样的:

代码语言:javascript
复制
public static void DeleteObjects<TEntity> (this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class
{
  foreach(var entity in data)
    set.DeleteObject(entity);
}

调用方式如下:

代码语言:javascript
复制
context.User_Roles.DeleteObjects(context.User_Roles.Where(ur => ur.UserId == user.UserId))
context.SaveChanges();
票数 24
EN

Stack Overflow用户

发布于 2011-10-09 00:21:24

代码语言:javascript
复制
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命令被发送到服务器,这是一种不必要的巨大浪费。什么

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4641251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档