“Update-Database”命令因TimeOut异常而失败

时间:2015-09-01 11:36:13

标签: c# entity-framework timeout entity-framework-6

我正在使用EF迁移并拥有包含大量数据的表。我需要更改具体列的MaxLength(它没有长度限制)。

ALTER TABLE MyDb ALTER COLUMN [MyColumn] [nvarchar](2) NULL

此命令因TimeOut异常而失败。 试图在没有任何运气的情况下设置CommandTimeout i nDbContext构造函数。

有没有办法为Package Manager Console EF命令禁用或设置超时?

6 个答案:

答案 0 :(得分:22)

或者使用

编写更改脚本
Update-Database -script

然后,您可以使用SQL Management Studio对数据库执行脚本并运行它。

答案 1 :(得分:21)

自己找到解决方案。

由于EF5有一个新属性 CommandTimeout ,可从 DbMigrationsConfiguration

获取
internal sealed class MyMigrationConfiguration : DbMigrationsConfiguration<MyDbContext>
{
    public Configuration()
    {
        CommandTimeout = 10000; // migration timeout
    }
}

答案 2 :(得分:1)

我几乎完全一样:尝试增加列长度时超时到期。对我来说,使用update-database一小时前工作得很好。问题结果是数据库和我试图改变的表上的一个开放事务。一旦我回滚了该事务,update-database命令就没有问题了。

答案 3 :(得分:0)

就我而言,问题是由一个非常大的查询引起的,该查询在 EF 中超时但能够在 SSMS 中完成。

提示 Update-Database -script 的答案对我不起作用,它给出了另一条错误消息。

对我来说,我做了以下事情:

  • 打开 SSMS
  • 工具 > SQL Server Profiler
  • 返回 VS 并运行 Update-Database
  • 观看服务器分析器
  • 您应该能够看到查询超时
  • 复制该查询并在 SSMS 中运行它
  • 现在重新运行 Update-Database,较慢的部分应该没问题,因为查询已经完成。

免责声明:这可能不适用于所有情况,因为这取决于哪个特定查询会减慢您的速度。对我来说,它奏效了。

答案 4 :(得分:0)

只需为 MySql 120sec 添加 ConnectionStrings "Command Timeout=120" 例如

答案 5 :(得分:0)

EntityFrameworkCore 遇到了同样的更新数据库命令超时问题。发现 EFCore 中不再存在 -script 参数。文档说您需要使用 Script-Migration。

EFCore Script-Migration

您指定应用于数据库的最后一次迁移,然后它将为所有内容生成一个脚本以使其成为最新:

Script-Migration 20210307058985_addIndexesToClientTable

您可以从 .net 项目中的迁移文件名中获取完整的迁移 ID,只需将 .cs 去掉即可。或者,您可以从数据库中的 __EFMigrationsHistory 表中获取它。

如果你需要一个脚本来创建一个新的数据库,它说使用 0:

Script-Migration 0 InitialCreate

对我来说,它在 VS 中打开了一个临时 .sql 文件,因为我从包控制台管理器运行它,然后我能够在 MSSQL Management Studio 中复制和执行它。