Pet*_*Han 22 c# entity-framework entity-framework-6
我试图从表中删除多行.
在常规SQL Server中,这很简单,如下所示:
DELETE FROM Table
WHERE
Table.Column = 'SomeRandomValue'
AND Table.Column2 = 'AnotherRandomValue'
Run Code Online (Sandbox Code Playgroud)
在Entity Framework 6中,他们引入了RemoveRange()方法.
但是,当我使用它时,Entity Framework不是使用我提供的where子句删除行,而是查询数据库以获取与where子句匹配的所有行,并使用其主键逐个删除它们.
这是EntityFramework的当前限制吗?或者我使用RemoveRange()错了?
以下是我的使用方法RemoveRange():
db.Tables.RemoveRange(
db.Tables
.Where(_ => _.Column == 'SomeRandomValue'
&& _.Column2 == 'AnotherRandomValue')
);
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是一个批量删除库,它可以在不加载实体的情况下从 LINQ 查询中删除数据库中的多个记录。
存在多个支持此功能的库。
您可以在此处找到列表:实体框架批量删除库
免责声明:我是Entity Framework Plus项目的所有者
// using Z.EntityFramework.Plus; // Don't forget to include this.
// DELETE directly in SQL (without loading entities)
db.Tables.Where(_ => _.Column == 'SomeRandomValue'
&& _.Column2 == 'AnotherRandomValue')
.Delete();
// DELETE using a BatchSize
db.Tables.Where(_ => _.Column == 'SomeRandomValue'
&& _.Column2 == 'AnotherRandomValue')
.Delete(x => x.BatchSize = 1000);
Run Code Online (Sandbox Code Playgroud)
维基:EF+批量删除