EF ожидают обновления, не поддерживаются исключения MultipleActiveResultSets, если время ожидания предыдущей операции истекло - PullRequest
0 голосов
/ 20 февраля 2019

У меня следующая логика:

public async Task UpdateData(DbContext context)
{
    try
    {
        await LongUpdate(context);
    }
    catch (Exception e)
    {
        try
        {
            await context.Database.ExecuteSqlCommandAsync($@"update d set d.UpdatedAt = GETDATE() from SomeTable d where id > 11");
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}
// this operations takes about 1 minute
private static async Task<int> LongUpdate(DbContext context)
{
    context.Database.CommandTimeout = 5; // change this to 15 to see MultipleActiveResultSets exception
    return await context.Database.SqlQuery<int>($@"update otherTable set UpdatedAt = GETDATE();SELECT @@ROWCOUNT").FirstOrDefaultAsync();
}

Как показано выше, ожидаются две операции обновления.LongUpdate занимает больше минуты.

Когда для тайм-аута установлено значение 5 с: LongUpdate генерирует исключение тайм-аута и второе обновление успешно выполняется.

Когда я увеличиваю тайм-аут до 15 с или более: LongUpdate генерирует исключение тайм-аута, но второе обновление немедленно выдает: System.InvalidOperationException: соединение не поддерживает MultipleActiveResultSets ..

Разве не следует ожидать предотвращения этого исключения?Почему это зависит от значения времени ожидания?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...