В наших локальных базах данных разработки все работает, но в рабочей копии миграция завершается с ошибкой:
Невозможно снять блокировку приложения (Ресурс: '__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.
- Создание пустой миграции и обновления. Также не удалось
Я использую 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
Мобильная версия