Иногда, не всегда, я получаю следующую ошибку: «Базовый провайдер не удалось открыть».
Вот моя ситуация:
У меня есть список целочисленных ключей, которые я обрабатываю параллельно, чтобы использовать их в качестве параметра в скомпилированном запросе выбора. Я использую это в доменной службе 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 ... m появляется следующая ошибка: «Базовый провайдер не работает при открытии».
Это моя ситуация:
У меня есть список целочисленных ключей, которые я обрабатываю параллельно, чтобы использовать их в качестве параметра в скомпилированном запросе выбора. Я использую это в доменной службе 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 ... m появляется следующая ошибка: «Базовый провайдер не работает при открытии».
Это моя ситуация:
У меня есть список целочисленных ключей, которые я обрабатываю параллельно, чтобы использовать их в качестве параметра в скомпилированном запросе выбора. Я использую это в доменной службе 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, я сразу получаю сообщение об ошибке.
Используемый здесь код является упрощенной версией реального кода. Я также передаю намного больше ключей, следовательно, больше параллельных запросов.
Иногда во внутреннем исключении я вижу, что считыватель данных закрывается, но статус - подключение ..
Я пытался увеличить размер пула соединений, но безуспешно.
Есть ли у кого-нибудь хорошие предложения по решению этой проблемы? Спасибо заранее.