实体框架是否可以生成UPDATE..SQL中的WHERE语句
本文关键字:SQL UPDATE 中的 WHERE 语句 框架 是否 实体 | 更新日期: 2023-09-27 18:25:51
使用实体框架和存储库模式为内部企业MVC应用程序构建数据访问层。在某些情况下,我需要用SQL Server 2008 R2数据库中大约1亿行来更新表中的10万行。
我使用的是EF6,目标是我们正在重构的现有遗留数据库。我是实体框架的新手,但对SQL Server有很多经验。
无论我的更新语句的结构如何,当我运行探查器时,我都会根据ID看到60k个单独的更新。这可能需要长达5分钟的运行时间。然而,我要说的是一个"批号",它是为一堆这样的记录编制索引的。有没有办法用EF生成的单个where子句UPDATE
这些记录?我的解决方案是只写一个简单的sp,然后调用EF。
当前版本的实体框架不支持您希望的批量操作。每次更新或删除都是每条记录的一个单独事务。为了避免这种情况,如果你不想经历创建存储过程的麻烦,你可以直接从实体框架运行SQL(不过,它们很容易启动和运行)
using (var context = new MyDbContext())
{
context.ExecuteStoreCommand("Update MyTable Set Value = {0} Where SomeColumn = {1}",
updateValue, queryValue);
context.ExecuteStoreCommand("Delete From MyTable Where value = {0}",
myValueToQueryBy);
}
请注意,通过使用看起来与string.Format()
非常相似的语法来使用参数。有关详细信息,请参阅MSDN。