我正在使用EF迁移并拥有包含大量数据的表。我需要更改具体列的MaxLength(它没有长度限制)。
ALTER TABLE MyDb ALTER COLUMN [MyColumn] [nvarchar](2) NULL
此命令因TimeOut异常而失败。 试图在没有任何运气的情况下设置CommandTimeout i nDbContext构造函数。
有没有办法为Package Manager Console EF命令禁用或设置超时?
答案 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
的答案对我不起作用,它给出了另一条错误消息。
对我来说,我做了以下事情:
免责声明:这可能不适用于所有情况,因为这取决于哪个特定查询会减慢您的速度。对我来说,它奏效了。
答案 4 :(得分:0)
只需为 MySql 120sec 添加 ConnectionStrings "Command Timeout=120" 例如
答案 5 :(得分:0)
EntityFrameworkCore 遇到了同样的更新数据库命令超时问题。发现 EFCore 中不再存在 -script 参数。文档说您需要使用 Script-Migration。
您指定应用于数据库的最后一次迁移,然后它将为所有内容生成一个脚本以使其成为最新:
Script-Migration 20210307058985_addIndexesToClientTable
您可以从 .net 项目中的迁移文件名中获取完整的迁移 ID,只需将 .cs 去掉即可。或者,您可以从数据库中的 __EFMigrationsHistory 表中获取它。
如果你需要一个脚本来创建一个新的数据库,它说使用 0:
Script-Migration 0 InitialCreate
对我来说,它在 VS 中打开了一个临时 .sql 文件,因为我从包控制台管理器运行它,然后我能够在 MSSQL Management Studio 中复制和执行它。