1

それは一つではないですか?異なるリポジトリから 5 つのリストを取得するメソッドがあります。各呼び出しは、新しい Datacontext を開いたり閉じたりします。これは大丈夫ですか、それともすべてを1つのデータコンテキストにラップする必要がありますか? この場合、同じデータ コンテキストを使用するのは簡単ではありませんが、1 つのページ リクエストで多数のデータ コンテキストを開いたり閉じたりするのは良くないと思います。

4

2 に答える 2

2

これはまさにその主題に関する記事です...

Linq to SQL DataContext の有効期間管理

彼はリクエストごとに 1 つを推奨しており、私はそのパターンをいくつかのアプリケーションに実装しましたが、うまく機能しています。

彼は記事でそれについて少し話しています... 彼の簡単で汚いバージョンは System.Web への参照を作成し、次のようなことを行います:

    private TDataContext _DataContext;

    public TDataContext DataContext
    {
        get
        {
            if (_DataContext == null)
            {

                if (HttpContext.Current != null)
                {
                    if (HttpContext.Current.Items[DataContextKey] == null)
                    {
                        HttpContext.Current.Items[DataContextKey] = new TDataContext();
                    }

                    _DataContext = (TDataContext)HttpContext.Current.Items[DataContextKey];
                }
                else
                {
                    _DataContext = new TDataContext();
                }
            }

            return _DataContext;
        }
    }

しかし、彼は次のステップに進み、System.Web への参照を取り除き、依存性注入を使用して、単体テスト、Web アプリケーションなどで実行しているかどうかに基づいてデータコンテキストの寿命を決定できる独自の IContainer を作成することをお勧めします。 .

例:

public class YourRepository
{

    public YourRepository(IContainer<DataContext> container)
    {

    }

}

次に置き換えHttpContext.Current.Items[DataContextKey]ます_Container[DataContextKey]

お役に立てれば...

于 2009-05-15T06:12:33.443 に答える