【问题标题】:How to delete multiple records with Entity Framework ASP.Net MVC 5? [closed]如何使用 Entity Framework ASP.Net MVC 5 删除多条记录? [关闭]
【发布时间】:2015-01-27 08:45:00
【问题描述】:

我有如下图所示的表格:

如何使用基于 ProjectId 的实体框架删除表的所有记录?

【问题讨论】:

标签: c# entity-framework asp.net-mvc-5


【解决方案1】:

这一个班轮可以做到:

  db.ProRel.RemoveRange(db.ProRel.Where(c => c.ProjectId == Project_id));

【讨论】:

  • 非常简单和完美的答案非常感谢它完美的工作
  • 简单优雅的解决方案,谢谢!
  • @AtulChaudhary 说了什么。 RemoveRange 不采用 IQueriable,因此它所做的只是将您要删除的所有数据检索到客户端,然后对其进行枚举。真正需要的是一种将条件传递给数据库的方法,该条件定义您要删除的内容并由数据库完成,而无需将所有数据无意义地复制到客户端。
  • 优雅的解决方案,谢谢
  • 迄今为止最好的一个班轮。不要为 get 添加 db.SaveChanges();
【解决方案2】:
context.Projects.Where(p => p.ProjectId == projectId)
               .ToList().ForEach(p => context.Projects.Remove(p));
context.SaveChanges();

取自very similar post(可能应该被标记为重复)。

【讨论】:

  • 我想你忘了实际删除。
  • @KirkWoll ForEach(context.Projects.DeleteObject);删除它们
  • 嗯...不,这不对。
  • 哦,我明白了,DeleteObject 生活在 ObjectContext 上。 (当前和现在的标准DbContext 没有那个方法)
  • 我正在研究的解决方案是在不支持 RemoveRange 的旧版本 EF 中。我最终使用了它,因为它是我找到的下一个最佳解决方案。
【解决方案3】:

您可以使用DbSet.RemoveRange() 并传入IEnumerable<Model>

您使用ProjectId 构建模型列表,并使用数据上下文将它们传递给RemoveRange()。最后,拨打SaveChanges()

【讨论】:

  • 我是 ASP.Net MVC 和 Entity Framework 的新手,您能否详细举例说明我的表名是 ProvRel 如何根据 ProjectId 从该表中删除多条记录
  • 没问题,我需要查看更多代码。我需要你的数据上下文和数据模型。
  • 私有 MYDBContext db = new MYDBContext();
  • 并非所有 EF 版本都支持 RemoveRange(),如果是这种情况,请改用 Jesse Carter 的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多