c# - 在 EntityFramework 中更新或删除多个实体的推荐做法是什么?

标签 c# .net sql entity-framework

在 SQL 中,有时可能会这样写

DELETE FROM table WHERE column IS NULL

UPDATE table SET column1=value WHERE column2 IS NULL

或任何其他可能适用于多行的标准。

据我所知,最好的 EntityFramework 可以做的是

foreach (var entity in db.Table.Where(row => row.Column == null))
    db.Table.Remove(entity);   // or entity.Column2 = value;
db.SaveChanges();

当然,这将检索所有实体,然后为每个实体运行单独的 DELETE 查询。如果满足标准的实体很多,那肯定会慢得多。

那么,长话短说,EntityFramework 是否支持在单个查询中更新或删除多个实体?

最佳答案

EF 不支持批量更新或删除,但您可以简单地执行以下操作:

db.Database.ExecuteSqlCommand("DELETE FROM ...", someParameter);

编辑:

真正想要坚持使用 LINQ 查询的人有时会使用变通方法,他们首先从 LINQ 查询创建选择 SQL 查询:

string query = db.Table.Where(row => row.Column == null).ToString();

然后找到第一次出现的 FROM 并将查询的开头替换为 DELETE 并使用 ExecuteSqlCommand 执行结果。这种方法的问题在于它仅适用于基本场景。它不适用于实体拆分或某些您需要为每个实体删除两个或更多记录的继承映射。

关于c# - 在 EntityFramework 中更新或删除多个实体的推荐做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9776964/

相关文章:

c# - UTF8Encoding string to byte[] 转换意外行为

c# - 选择 "Run whether user is logged in or not"时任务计划程序不起作用

c# - 如何使用 Oracle Managed Data Access c# 进行批量插入

c# - 使用 TransactionScope : System. Transactions.TransactionAbortedException:事务已中止

c# - 仅当值不在本地缓存中时调用昂贵的 Reactive Extensions `IObservable` 函数

c# - 重新初始化 MembershipProvider ASP.NET

c# - 构建服务器上的 System.Net.Http 版本错误

mysql - FROM 子句中的 SQL 子查询

mysql - SQL文件夹实体去重流程

mysql - 按类别 SQL 查询的相对频率