Ent Entity Framework可以在SQL中生成UPDATE ... WHERE语句吗?

时间:2015-12-04 18:38:06

标签: c# sql-server entity-framework

使用Entity Framework和存储库模式为内部企业MVC应用程序构建数据访问层。在某些情况下,我需要在SQL Server 2008 R2数据库中的1亿行左右的表中更新100k行。

我正在使用EF6,目标是我们正在重构的现有旧数据库。我是Entity Framework的新手,但对SQL Server有很多经验。

无论我如何构建我的更新语句,当我运行一个分析器时,我会看到ID的6k个别更新。这可能需要5分钟才能运行。但是,我已经说过一个“批号”,它是为一堆这些记录编制索引的。有没有办法UPDATE使用EF生成的单个where子句来记录这些记录?我的解决方案是编写一个简单的sp,然后我有EF调用。

1 个答案:

答案 0 :(得分:4)

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