使用Entity Framework和存储库模式为内部企业MVC应用程序构建数据访问层。在某些情况下,我需要在SQL Server 2008 R2数据库中的1亿行左右的表中更新100k行。
我正在使用EF6,目标是我们正在重构的现有旧数据库。我是Entity Framework的新手,但对SQL Server有很多经验。
无论我如何构建我的更新语句,当我运行一个分析器时,我会看到ID的6k个别更新。这可能需要5分钟才能运行。但是,我已经说过一个“批号”,它是为一堆这些记录编制索引的。有没有办法UPDATE
使用EF生成的单个where子句来记录这些记录?我的解决方案是编写一个简单的sp,然后我有EF调用。
答案 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。