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