如何使用 Entity Framework ASP.Net MVC 5 删除多条记录? [关闭]

Posted

技术标签:

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

我有如下图所示的表格:

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

【问题讨论】:

How do I delete multiple rows in Entity Framework (without foreach)的可能重复 我不在乎 foreach 或没有 foreach 我想要一个基于 ProjectId 删除记录的好方法 【参考方案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 的答案

以上是关于如何使用 Entity Framework ASP.Net MVC 5 删除多条记录? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 5、Entity Framework 6 中使用流利的 API 映射表?

这是如何使用 Entity Framework Core 和 ASP.NET Core MVC 2.2+ 和 3.0 创建数据传输对象 (DTO)

使用 ASP.NET Core 和 Entity Framework Core 进行集成测试 - 如何在每次测试时恢复数据库中的测试数据?

Entity Framework Core 5.0 如何将多对多连接的 LINQ 转换为使用 ASP.NET 成员资格的交集表

如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?

使用 Entity Framework