在 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/