4

私はAzureデータベースを60個までの同時接続に制限しています。私の問題は、Entity Frameworkを使用してこのWebサイトで消費されるようにこのデータベースにデータを取り込むいくつかのクローラがあることです。Entity Frameworkを使用したデータベースへの接続の制限C#

複数のクローラがすべての接続を使い果たしてエラーを出力するのに時間がかかりません。私は、接続文字列で最大プールサイズの値を設定しようとしましたが、これは実際のデータベース接続に制限を適用していないようです。

DbContextをシングルトンでラップすることができますが、クローラ全体を1つの接続に限定します。

これを達成する他の方法はありますか?

+0

使用しているEFのバージョンは?接続文字列の 'Max Pool Size = 60;'と組み合わせて 'Pooling = true; 'を設定していますか? *(ただし、「true」はデフォルトの設定であるはずです)* –

+0

接続を終了しても接続は解除されませんか? –

+0

@GeoffJamesはいプーリングはtrueに設定されています。私は最大プールサイズ= 1を設定しようとしました。私は接続を制限することができるかどうかを確認する。しかし、必要に応じてより多くの接続が生成されます。私は現在、EF 6.1.3を使用しています。私はコアを試しましたが、問題によってグループは完全に使用できなくなりました。 – mscard02

答えて

4

共有リソースへの同時アクセスを制限しようとしています。通常これにはSemaphoreが使用されます。単一のボックスまたはクライアントがセマフォを配置する自然な場所は、SQL Server自体になります別のボックス上で実行されている場合は、しかし、Semaphore or SemaphoreSlim

を使用することができ、単一のアプリ間でこれを行うには

。それを実装する方法の1つは、this articleを参照してください。アプリケーションは、DbContextを使用してデータベースにアクセスする前に、ロックを取得するためにprocを呼び出す必要があります。セマフォを読み込むために1つの接続を維持するには、セマフォの制限は59である必要があります。

関連する問題