Подтвердить что ты не робот

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

Интересно отметить, что на моем ноутбуке это не происходит, но на моей виртуальной машине (лазурном) это происходит со 100% -ой частотой отказа.

Я использую Ef 6.0.0 -rc1. Обратите внимание, что обновление EF не является вариантом. При обновлении до EF 6.0.0 или 6.0.1 я получаю следующую ошибку со 100% -ой частотой отказа:

Ошибки во время первого добавления-переноса кода

Я также приурочил ошибку. Для запуска ошибки требуется около 1,5 минут. При запуске с флагом -Verbose он пытался создать 200 таблиц с индексами. Копирование запроса sql и его исключение в SSMS занимает 5 секунд.

Несколько вещей, которые я устал, но не работал:

1) Установка ObjectContext.CommandTimeout = 36000 // 10 hours!, как указано здесь:

qaru.site/info/28868/...

2) Установка таймаута в строке подключения в "web.config":

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

3) Настройка транзакции "machine.config" maxTimeout:

<system.transactions> <machineSettings maxTimeout="00:00:00" /> </system.transactions>

4) Установка "Тайм-аут удаленного запроса" на сервере sql

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.<ExecuteStatements>b__2e()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>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.<Update>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.<.ctor>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.
4b9b3361

Ответ 1

В конструкторе класса Configuration.cs(в папке миграции) добавьте свойство CommandTimeout = Int32.MaxValue;

Ответ 2

Я перезапустил службу SQL Server (Win7 - Управление компьютером > Службы и приложения > Службы)

Ответ 3

Для меня проблема была в том, что запуск сценария миграции занял много времени (15 минут).

Вот как я работал над этой проблемой:
1. Запустите update-database -script (может потребоваться -force)
2. Скопируйте этот вывод сценария SQL и запустите в SQL Server Management Studio.

Ответ 4

Я столкнулся с этим в своей производственной среде, потому что он создавал такие запросы, как те, которые были здесь: Почему Entity Framework 6 генерирует сложные SQL-запросы для простого поиска?

Это фактически связано с ошибкой в ​​этой версии EF: https://entityframework.codeplex.com/workitem/2083

Они изменили нулевую семантику по умолчанию от 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, но вам все равно нужно установить опцию выше, чтобы упростить условия.

Ответ 5

У меня была точно такая же проблема, я знаю, что эта тема год назад, но, возможно, она поможет кому-то еще.

Я пытался создать базу данных в сущности 5 с помощью консоли диспетчера пакетов, используя приведенную ниже строку подключения.

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

Каждый раз, когда я запускал его, я получил ошибку ниже.

Время ожидания истекло. Период ожидания истекает до завершения операции или сервер не отвечает.

Чтобы исправить это, я просто добавил параметр -force, и он прошел прямо.

Ответ 6

FYI EF Migrations извлекают время ожидания из отдельной конфигурации:

public class MyContextConfiguration : DbMigrationsConfiguration<MyContext>
{
    public MyContextConfiguration()
    {
        CommandTimeout = 900;
    }
}