У меня есть статический класс, содержащий статическое поле, которое ссылается на объект-оболочку DataContext.
DataContext в основном создается Visual Studio, когда мы создали файл dbml, и содержит методы для каждой из хранимых процедур, которые есть в БД.
Наш класс в основном имеет набор статических методов, которые запускают каждый из этих хранимых методов proc и затем возвращают массив на основе запроса LINQ.
Пример:
public static TwoFieldBarData[] GetAgesReportData(string pct)
{
return DataContext
.BreakdownOfUsersByAge(Constants.USER_MEDICAL_PROFILE_KEY, pct)
.Select(x => new TwoFieldBarData(x.DisplayName, x.LeftValue, x.RightValue, x.TotalCount))
.ToArray();
}
Время от времени мы получаем следующую ошибку:
Уже есть открытый DataReader
связано с этой командой, которая
должны быть закрыты ели
Это происходит с перебоями, и мне любопытно, что происходит. Я предполагаю, что, когда есть некоторая задержка между выполнением одного метода и последующим запуском, он блокирует DataContext и выдает ошибку.
Может ли это быть случаем для упаковки каждого из вызовов DataContext
LINQ в lock(){}
, чтобы получить эксклюзивность для этого типа и гарантировать, что другие запросы помещаются в очередь?