Иногда, не всегда, я получаю следующую ошибку: «Основной провайдер не удалось открыть».
Это моя ситуация:
У меня есть список целочисленных ключей, которые я обрабатываю параллельно, чтобы использовать их в качестве параметра в скомпилированном запросе выбора. Я использую это в домене RIA.
var queryResult = new List<int> {1, 2, 3}.AsParallel().Select(i => CompiledQueries.GetRecordByKey(this.ObjectContext, i)).ToList();
Вот так выглядит скомпилированный запрос:
public static IEnumerable<CompiledQueryResult> GetRecordByKey(MyEntities _context, int _key)
{
if (_getRecordByKey == null)
{
_getRecordByKey = CompiledQuery.Compile<MyEntities, int, IEnumerable<CompiledQueryResult>>
((ctx, key) =>
ctx.Records
.Where(r => r.Id == key)
.Select(r => new CompiledQueryResult
{
Id = r.ID,
Name = r.Name,
...
})
);
}
return _getRecordByKey.Invoke(_context, _key);
}
Я использую EF4, RIA (на самом деле ObjectContext службы домена передается методу скомпилированного запроса), строка соединения содержит известный MultipleActiveResultSets = True ...
Когда для MultipleActiveResultSets установлено значение false, я сразу получаю сообщение об ошибке.
Код, используемый здесь, является упрощенной версией реального кода. Я также передаю намного больше ключей, таким образом, больше параллельных запросов ..
Иногда я вижу во внутреннем исключении, что считыватель данных закрывается, но статус подключается ..
Я пытался увеличить размер пула соединений, но безуспешно.
Есть ли у кого-нибудь хорошие предложения по решению этой проблемы? Спасибо заранее.