0

Linq2SQLの部分クラス機能を使用して、オブジェクトにいくつかのヘルパーメソッドを追加しています。

問題は、これらのヘルパーメソッドでいくつかの追加のデータベースクエリを実行する必要があるため、毎回新しいDataContextを作成する必要があることです。

単一のWebサービスクエリ内のすべてのデータベース操作にDataContextを再利用したいと思います。

ヘルパーメソッドを別のクラスに保持する場合は、クラスコンストラクターでコンテキストを1回だけ初期化し、それをすべてのメソッドで再利用します。

拡張Linq2SQLクラスでは、現在のオブジェクトの取得に使用されたものと同じDataContextへの参照を取得する方法がわかりません。

4

3 に答える 3

1

作成するデータコンテキストを取得する方法はないと思います。カスタムメソッドに渡す必要があります。私のエンティティ部分クラス内では、次のような多くの操作を行います。

public void Query()
{
    using (var db = new DataContext())
    {
         Query(db);
    }
}

public void Query(DataContext db)
{
    /* do something with the db */
}

これにより、オブジェクトを作成したDataContextを渡すか、ピンチで新しいオブジェクトを使用するだけの柔軟性が得られます。

于 2012-05-23T14:36:17.070 に答える
1

実際、それ自体はできません。特に、LINQ-to-SQL は POCO と連携できるためです。データ コンテキストを手動で処理し、さまざまな時点で使用する場合はそれらを保持する必要があります。ここでのアプローチの 1 つは、リーフ オブジェクトではなくデータ コンテキストからメソッドを使用できるようにすることですその場合、データ コンテキストを知る必要があります。

場合によっては、「リクエスト」または「コンテキスト」オブジェクトに対してデータ コンテキストを利用できるようにしておくことが、これを回避する良い方法になることがあります。

于 2012-05-23T13:18:48.877 に答える
0

問題は、これらのヘルパー メソッドで追加のデータベース クエリを実行する必要があるため、毎回新しい DataContext を作成する必要があることです。

いいえ、ありません。ビジネス ロジックを L2S エンティティに追加しないようにします。すぐに手に負えない絡み合った泥の玉になります。これらの操作は、それらのエンティティを使用するサービス クラスに配置します。たとえば、コマンド/ハンドラー パターンとクエリ/ハンドラーパターンを使用します。

単一の Web サービス クエリ内のすべてのデータベース操作で DataContext を再利用したいと考えています。

何をするにしても、DataContextインスタンスが複数のスレッドによって使用されるのを防ぎます。できることはDataContext、Web リクエストごとに 1 つです。

于 2012-05-23T13:20:19.353 に答える