Как искать баг
От: snaphold  
Дата: 21.12.22 06:53
Оценка:
Есть куча операций в ЕФ контекстом и при Сейве


выдает

System.InvalidOperationException: Invalid operation. The connection is closed.

at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__169_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__274_0(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)



как тут искать причину ошибки?
Re: Как искать баг
От: vaa  
Дата: 21.12.22 07:03
Оценка:
Здравствуйте, snaphold, Вы писали:

S>Есть куча операций в ЕФ контекстом и при Сейве



S>выдает




S>как тут искать причину ошибки?

Это весь стэк? ошибка случайная или стабильная?
в параметрах не передаются ли массивы большого размера?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Как искать баг
От: snaphold  
Дата: 21.12.22 07:35
Оценка:
Здравствуйте, vaa, Вы писали:



S>>как тут искать причину ошибки?

vaa>Это весь стэк? ошибка случайная или стабильная?
vaa>в параметрах не передаются ли массивы большого размера?

ошибка стабильная.
в корне ошибки такое
а в inner exception что выше написал

Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
---> System.InvalidOperationException: Invalid operation. The connection is closed.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__169_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__274_0(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(DbContext _, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
at AutoProcess.Core.Presenations.ProcessBuild.SaveAsync(SubmitModel dataModel, CancellationToken ct) in AutoProcess.Core.Presenations.ProcessBuild.cs:line 204

Re: Как искать баг
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 21.12.22 09:12
Оценка:
Здравствуйте, snaphold, Вы писали:

S>Есть куча операций в ЕФ контекстом и при Сейве

Я бы глянул в
— Event Log (если вы на Windows)
— в логах самого SQL

Я тут не претендую на роль гуру, но вроде как закрытие соединения указывает на (условно говоря) некую инфраструктурную проблему. Т.е. это не триггер/констрейнт сработал (там всегда нормальна SQL ошибка возвращается).
Re: Как искать баг
От: rameel https://github.com/rsdn/CodeJam
Дата: 21.12.22 09:17
Оценка: 99 (3) +4
Здравствуйте, snaphold, Вы писали:

S>как тут искать причину ошибки?


System.InvalidOperationException: Invalid operation. The connection is closed.


Диспозишь connection до выполнения, возможно забыл await перед возвратом из метода

using (var db = GetDataContext())
    return await db.Persons.ToListAsync();
    //     ^^^^^
    // Скорее всего пропущен
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Как искать баг
От: snaphold  
Дата: 21.12.22 10:39
Оценка:
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, snaphold, Вы писали:


S>>как тут искать причину ошибки?


R>
R>System.InvalidOperationException: Invalid operation. The connection is closed.
R>


R>Диспозишь connection до выполнения, возможно забыл await перед возвратом из метода


R>
R>using (var db = GetDataContext())
R>    return await db.Persons.ToListAsync();
R>    //     ^^^^^
R>    // Скорее всего пропущен
R>


Чётко! странно что текст ошибки про это не говорит
Re[3]: Как искать баг
От: vaa  
Дата: 21.12.22 12:31
Оценка:
Здравствуйте, snaphold, Вы писали:


R>>
R>>using (var db = GetDataContext())
R>>    return await db.Persons.ToListAsync();
R>>    //     ^^^^^
R>>    // Скорее всего пропущен
R>>


S>Чётко! странно что текст ошибки про это не говорит


Так это не ошибка, эвэйт говорит подождать, если не подождать то основной поток продолжит выполнение.
пишите на F# там компилятор намного строже к таким вещам.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Как искать баг
От: m2user  
Дата: 21.12.22 17:59
Оценка:
R>>>
R>>>using (var db = GetDataContext())
R>>>    return await db.Persons.ToListAsync();
R>>>    //     ^^^^^
R>>>    // Скорее всего пропущен
R>>>


S>>Чётко! странно что текст ошибки про это не говорит


vaa>Так это не ошибка, эвэйт говорит подождать, если не подождать то основной поток продолжит выполнение.

vaa>пишите на F# там компилятор намного строже к таким вещам.

Там скорее всего был warning CS1998: This async method lacks 'await' operators and will run synchronously.
Можно на него ориентироваться.

А чего F# выдал бы в аналогичной ситуации?
Re[5]: Как искать баг
От: vaa  
Дата: 22.12.22 02:31
Оценка: 3 (1)
Здравствуйте, m2user, Вы писали:

R>>>>
R>>>>using (var db = GetDataContext())
R>>>>    return await db.Persons.ToListAsync();
R>>>>    //     ^^^^^
R>>>>    // Скорее всего пропущен
R>>>>


S>>>Чётко! странно что текст ошибки про это не говорит


vaa>>Так это не ошибка, эвэйт говорит подождать, если не подождать то основной поток продолжит выполнение.

vaa>>пишите на F# там компилятор намного строже к таким вещам.

M>Там скорее всего был warning CS1998: This async method lacks 'await' operators and will run synchronously.

M>Можно на него ориентироваться.

M>А чего F# выдал бы в аналогичной ситуации?


Проблемы C#
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.