EF Code First – 超时已过期。 完成前经过了超时时间

为这个措辞奇怪的问题道歉。 我不知道实际问题是什么,但希望有人可以给我一些见解。

尝试运行迁移时出现以下错误:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out 

值得注意的是,在我的笔记本电脑上,这种情况并没有发生,但在我的VM(azure色 – 大)上,这种情况发生在100%的故障率上。

我使用的是Ef 6.0.0 -rc1 。 请注意,更新EF不是一个选项。 如果更新到EF 6.0.0或6.0.1,我将收到以下错误,100%失败率:

Code First添加迁移期间的错误

我也计时了错误。 触发错误大约需要1.5分钟。 当使用-Verbose标志运行时,它试图创建200个带索引的表。 复制sql查询并在SSMS中将其排除需要5秒。

我厌倦但没有用的一些事情:

1)设置ObjectContext.CommandTimeout = 36000 // 10 hours! 如下所示:

https://stackoverflow.com/a/6234593/305469

2)在“web.config”中设置连接字符串中的超时:

connectionString="Data Source=localhost;Initial Catalog=myDB;Integrated Security=SSPI;Connection Timeout=36000"

3)设置“machine.config”事务maxTimeout:

4)在sql server上设置“远程查询超时”

 USE MyDB; GO EXEC sp_configure 'remote query timeout', 0 ; GO RECONFIGURE ; GO 

那么发生了什么? 为什么CommandTimeout不被尊重? 有什么建议?

完整跟踪如下:

 System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed) at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.c__DisplayClass32.b__2e() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.c__DisplayClass1.b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto) at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) at System.Data.Entity.Migrations.DbMigrator.c__DisplayClassc.b__b() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force) at System.Data.Entity.Migrations.UpdateDatabaseCommand.c__DisplayClass2.b__0() at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) ClientConnectionId:8cbbc70c-8182-417e-9aca-4603f797340d Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 

在Configuration.cs类的构造函数中(在迁移文件夹中)添加属性CommandTimeout = Int32.MaxValue;

我重新启动了SQL Server服务(Win7 – 计算机管理>服务和应用程序>服务)

我在生产环境中遇到了这个问题,因为它产生了类似于以下内容的查询: 为什么Entity Framework 6会为简单查找生成复杂的SQL查询?

这实际上与此版本的EF中的错误有关: https : //entityframework.codeplex.com/workitem/2083

他们将默认的null语义从5改为6,所以我猜你在升级后遇到了同样的问题。 我的机器只有一小部分数据作为我的远程安装,直到我开始生产我不知道我有性能问题。 查询通常会产生一个表扫描,这将超时更大的表。

要将其更改为使其像EF5一样工作,您必须设置:

DbContextConfiguration.UseDatabaseNullSemantics = true

请参阅此处: http : //msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.usedatabasenullsemantics(v=vs.113).aspx

该错误已在EF 6.1中修复,但您仍需设置上述选项以便在条件适中的情况下变得简单。

我刚才有同样的问题,我知道这个post已经有一年了,但也许它会帮助别人。

我正在尝试使用包管理器控制台使用下面的连接字符串在实体5中创建数据库。

update-database -ConfigurationTypeName My.Project.EF.Migrations.Configuration -ConnectionStringName MyDatabaseDev -ProjectName Project.Name -StartUpProjectName Database.Name

每次我运行它我都得到以下错误。

超时已过期。 操作完成之前经过的超时时间或服务器没有响应。

为了解决这个问题,我只需添加-force参数即可。

对我来说,问题是迁移脚本需要很长时间才能运行(15分钟)。

这就是我解决这个问题的方法:
1.运行update-database -script (可能需要-force
2.复制此SQL脚本输出并在SQL Server Management Studio中运行