私は MySQL (MARS をサポートしていません) を使用しており、複数の を並行して実行しようとしていますSELECT
。接続文字列は同じですが、それぞれSELECT
に別の db コンテキストを作成します。
次のようになります。
using (var db = DataContextCreator.Instance.Create())
{
return db.Customers
.Where(it => it.customer_Id > 10)
.Detach(db.Customers);
}
一言Detach
-- これは、1 つまたは複数のレコードを取得するヘルパー メソッドです。2番目のケースでは、それらのリストを作成し(それらを具体的なデータにするため)、データベースコンテキストからレコードを切り離し(GCがデータベースコンテキストを解放できるように)、切り離されたデータを返します。
今のところ、「この接続に関連付けられた開いている DataReader が既にあり、最初に閉じる必要があります」という恐ろしいエラーが表示されます。私は明示的に DataReader を使用していないので、その理由を 100% 確信したいと思います。
単一の接続文字列を使用してこれらすべての db コンテキストを作成しているためですか? 言い換えれば、上記のシナリオには MARS が必要ですか?
ホイールを再発明したくないので質問しています。また、すべてのクエリがかなり小さくて速いので、愚かな回避策を考えています-dbコンテキストクリエーターでロックを使用します。このようにして、データベースをクエリする各ブロックは、別のブロックと並行して実行されないことが保証されます。