В настоящее время я выполняю сложную задачу миграции, в которой каждая итерация должна быть включена в транзакцию в случае сбоя.Каждая итерация может занять до 2 часов.
В основном это было успешно.В некоторых случаях между доступами к соединению требуется длительная операция.
По существу, соединение некоторое время не используется (> 10 минут), и когда я пытаюсь использовать соединение снова, я обнаруживаю, что оносломано:
System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The connection is broken and recovery is not possible. The connection is marked by the server as unrecoverable. No attempt was made to restore the connection.
at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__180_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
Код выглядит примерно так:
// Context = instance of DbContext
using (var dbContextTransaction = Context.Database.BeginTransaction())
{
DoStuffWithContext(Context);
PotentiallyLongOperationWithoutContext();
DoMoreStuffWithContext(Context);
}
Обычно это все работает нормально, но когда PotentiallyLongOperationWithoutContext действительно занимает много времени, я получаю исключение, когда DoMoreStuffWithContext сначала пытается использоватьконтекст.