在EF迁移中更新大量数据

时间:2014-10-28 19:44:05

标签: c# entity-framework entity-framework-6 ef-migrations

我有一个包含一亿行左右的SQL表,其架构由EF迁移管理。

我想更改链接到该表的枚举中的值,因此我需要将DB中的所有值更新为新值。像下面的东西。

this.Sql("UPDATE MyTable SET MyEnum=0 WHERE MyEnum=-1");

这在一个较小的表上会很好,但由于表的大小,它不适合一次运行这么大的更新(我得到连接超时,tempdb空间问题,事务日志空间问题等)。最好分批进行。例如:

while(ctx.MyTable.Any(m =>m.MyEnum == -1))
{
    this.Sql("UPDATE TOP (1000000) MyTable SET MyEnum=0 WHERE MyEnum=-1");
}

不幸的是,我无法找到一种在迁移过程中从表中读取的方法(例如,如何在迁移期间执行此操作ctx.MyTable.Any(m =>m.MyEnum == -1))。有没有办法做到这一点,以便我可以批量进行EF迁移更新。

1 个答案:

答案 0 :(得分:-1)

我的建议,基于准确知道EF对你来说有多慢(即使是分批进行),你可以创建一个存储过程来完成你想要做的事情,然后只需让迁移只是在存储过程运行时调用它。希望它能够快速地运行它,因为一切都将在SQL方面完成。