Миграция EF Core 9 завершается сбоем в рабочей копии базы данных с ошибкой «Невозможно снять блокировку приложения».C#

Место общения программистов C#
Ответить
Anonymous
 Миграция EF Core 9 завершается сбоем в рабочей копии базы данных с ошибкой «Невозможно снять блокировку приложения».

Сообщение Anonymous »

Я использую EF Core 9 и пытаюсь выполнить миграцию для копии нашей рабочей базы данных.
В наших локальных базах данных разработки все работает, но в рабочей копии миграция завершается с ошибкой:

Невозможно снять блокировку приложения (Ресурс: '__EFMigrationsLock')
, поскольку она в настоящее время не удерживается.

Шаги по устранению неполадок:
  • Завершение активных сеансов
    SELECT *
    FROM sys.dm_exec_sessions
    WHERE database_id = DB_ID('myDb')
  • Увеличено время ожидания строки подключения.
    DB_CONNECTION_STRING="Server=my.server.tld,1433;Initial Catalog=myDb;Persist Security Info=False;User ID=sa;Password=HighSecurePassword@smino4ever;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=30;Command Timeout=0;"
  • Разделение большого сценария миграции SQL на более мелкие фрагменты
    foreach (var step in steps)
    {
    migrationBuilder.Sql(step);
    }
  • Закомментировал тяжелые шаги
  • Искал в Интернете, но не нашел ничего, специфичного для EF Core 9 для SQL Server.
  • Создание пустой миграции и обновления. Также не удалось
Некоторые из задействованных таблиц содержат около 900 000 строк, поэтому миграция выполняет некоторые тяжелые операции, но она отлично работает в базах данных разработки.
Я использую SQL Server 2022 в контейнере, а наше приложение использует .NET 9.
Я был бы признателен за любые подсказки о том, как диагностировать или исправить это.
Полная ошибка:
Opened connection to database 'myDb' on server 'my.server.tld,1433'.
Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='0']
DECLARE @result int;
EXEC @result = sp_releaseapplock @Resource = '__EFMigrationsLock', @LockOwner = 'Session';
SELECT @result
Failed executing DbCommand (5ms) [Parameters=[], CommandType='Text', CommandTimeout='0']
DECLARE @result int;
EXEC @result = sp_releaseapplock @Resource = '__EFMigrationsLock', @LockOwner = 'Session';
SELECT @result
'AppContext' disposed.
Disposing connection to database 'myDb' on server 'my.server.tld,1433'.
Disposed connection to database '' on server '' (1ms).
Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot release the application lock (Database Principal: 'public', Resource: '__EFMigrationsLock') because it is not currently held.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at Microsoft.Data.SqlClient.SqlCommand.ExecuteScalar()
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteScalar(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.SqlServer.Migrations.Internal.SqlServerMigrationDatabaseLock.Dispose()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateImplementation(DbContext context, String targetMigration, MigrationExecutionState state, Boolean useTransaction)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.c.b__20_1(DbContext c, ValueTuple`4 s)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_0.b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:a1946ce9-7c39-41f8-b2fc-899c35d89574
Error Number:1223,State:1,Class:16
Cannot release the application lock (Database Principal: 'public', Resource: '__EFMigrationsLock') because it is not currently held.


Подробнее здесь: https://stackoverflow.com/questions/798 ... ease-the-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»