常にではありませんが、「基になるプロバイダーを開くことができませんでした」というエラーが発生することがあります。
これは私の状況です:
コンパイルされた選択クエリでパラメータとして使用するために並行して処理する整数キーのリストがあります。これを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に設定されていると、すぐにエラーが発生します。
ここで使用されているコードは、実際のコードを簡略化したものです。また、より多くのキーを渡すため、より多くの並列クエリが渡されます。内部例外で、データリーダーが閉じられているのに、ステータスが接続されていることがあります。
接続プールのサイズを拡大しようとしましたが、成功せずに。
この問題を解決するための良い提案はありますか?事前にThx。