В базовом проекте .NET я использую EntityFramework, и у меня есть DbContext (shopContext), внедренный в мой репозиторий классов.У меня следующий запрос:
var res = shopContext.Orders.Where(x => x.Status == 1).Sum(p => p.Total);
Иногда таблица «Заказы» выполняет задачи обслуживания, и таблица блокируется.Для этого запроса я не могу дождаться выполнения задач обслуживания, и мне нужен доступ к таблице с параметром IsolationLevel.ReadUncommited
в транзакции:
using (var transaction = mutuaContext.Database.BeginTransaction(IsolationLevel.ReadUncommitted))
{
var res = shopContext.Orders.Where(x => x.Status == 1).Sum(p => p.Total);
}
Проблема заключается в том, что я хочу только, чтобы контекст выполнялсязапрос с этой конфигурацией IsolationLevel в этих запросах, но следующие запросы продолжают выполняться, хотя таблица еще не заблокирована.
Почему следующие запросы не ожидают разблокировки таблицы?
Примермоего кода:
using (var transaction = mutuaContext.Database.BeginTransaction(IsolationLevel.ReadUncommitted))
{
var res = shopContext.Orders.Where(x => x.Status == 1).Sum(p => p.Total); // this code would be executed
}
var total = shopContext.Orders.Where(x => x.Status == 0).Sum(p => p.Total); // this code would NOT be executed but is executed
Я не понимаю, как контекст получает конфигурацию транзакции.Я хотел бы, чтобы кто-то объяснил мне это.
Я пытался позвонить transaction.Commit()
после первого запроса, но все еще не работал.