使用RemoveRange()批量删除行
我试图从表中删除多行。
在常规SQL Server中,这很简单,如下所示:
DELETE FROM Table WHERE Table.Column = 'SomeRandomValue' AND Table.Column2 = 'AnotherRandomValue'
在Entity Framework 6中,他们引入了RemoveRange()方法。
但是,当我使用它时,entity framework不是使用我提供的where子句删除行,而是查询数据库以获取与where子句匹配的所有行,并使用其主键逐个删除它们。
这是EntityFramework的当前限制吗? 或者我使用RemoveRange()
错误?
以下是我如何使用RemoveRange()
:
db.Tables.RemoveRange( db.Tables .Where(_ => _.Column == 'SomeRandomValue' && _.Column2 == 'AnotherRandomValue') );
我想我们达到了EF的限制。 有时你只需要使用ExecuteSqlCommand来保持高效 。
您正在寻找的是批量删除库,它从LINQ查询中删除数据库中的多个记录而不加载实体。
存在支持此function的多个库。
您可以在此处找到列表: entity framework批量删除库
免责声明 :我是项目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);
维基: EF +批量删除
它有点破,试试吧
db.Tables.RemoveRange( db.Tables .Where(_ => _.Column == 'SomeRandomValue' && _.Column2 == 'AnotherRandomeValue').AsEnumerable().ToList() ); db.SaveChanges();
var db1 = db.Tables .Where(_ => _.Column == 'SomeRandomValue' && _.Column2 == 'AnotherRandomeValue').AsEnumerable().ToList(); db.Tables.RemoveRange(db1); db.SaveChanges();
使用变量存储可移动列表并将其传递给RemoveRange()。
我通常喜欢这样,那就是工作。 希望这也适用于您的情况。
为什么不只是有一个适配器到数据库,只是发送适当的删除命令,如你的例子?
退一步思考。 你真的想从数据库下载记录以删除它们吗? 仅仅因为你可以做到这一点并不是一个好主意。
也许您可以考虑使用存储过程从数据库中删除项目? EF也允许这样做……
我自己正在处理这个问题,并同意Adi – 只需使用sql。
我正在清理日志表中的旧行,EF RemoveRange花了3分钟做了同样的事情,这在3秒内完成了:
DELETE FROM LogEntries WHERE DATEDIFF(day, GETDATE(), Date) < -6
Date是包含日期的列的名称。 要使其正确,请使用参数,当然,如下所示:
context.Database.ExecuteSqlCommand ("DELETE FROM LogEntries WHERE DATEDIFF(day, GETDATE(), Date) < @DaysOld", new System.Data.SqlClient.SqlParameter( "DaysOld", - Settings.DaysToKeepDBLogEntries));
请注意,我的案例涉及很多行。 当我启动项目并且没有大量数据时,RemoveRange工作正常。
上述就是C#学习教程:使用RemoveRange()批量删除行分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961189.html