实体框架是否可以生成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。

实体框架是否可以生成UPDATE..SQL中的WHERE语句

当前版本的实体框架不支持您希望的批量操作。每次更新或删除都是每条记录的一个单独事务。为了避免这种情况,如果你不想经历创建存储过程的麻烦,你可以直接从实体框架运行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。