2011-07-19 14 views
4

これは、1つのhttp要求中にLINQコンテキストを使用する良い方法ですか?ほぼすべてのリクエストで私はデータベースといくつかの挿入/更新からいくつかの選択をしています。それは動作するために継ぎ目がありますが、これはサーバーと負荷分散されたサーバー上のトラフィックが多い場合にどのように動作するのかわかりませんが、要求の全ライフサイクルの間コンテクストを維持するこの方法に関する意見やアイデアは誰でもありますか?要求変数としてLINQコンテキストを格納しますか?

public static AccountingDataContext Accounting 
{ 
    get 
    { 
     if (!HttpContext.Current.Items.Contains("AccountingDataContext")) 
     { 
      HttpContext.Current.Items.Add("AccountingDataContext", new AccountingDataContext(ConfigurationManager.ConnectionStrings["SQLServer.Accounting"].ConnectionString)); 
     } 
     return HttpContext.Current.Items["AccountingDataContext"] as AccountingDataContext; 
    } 
} 

答えて

2

私は、依存性注入のためのユニティを使用していますが、考え方は同じです:

protected void Application_BeginRequest() { 
    var childContainer = this.Container.CreateChildContainer(); 
    HttpContext.Current.Items["container"] = childContainer; 
    this.ControllerFactory.RegisterTypes(childContainer); 
} 

protected void Application_EndRequest() { 
    var container = HttpContext.Current.Items["container"] as IUnityContainer; 

    if (container != null) { 
     container.Dispose(); 
    } 
} 

コンテナはデータコンテキストそのうちの1つは、物事の数を、設定する責任があります。魅力のように動作します。ロードバランシングは行っていませんが、そこに問題があるとは想像できません。要求は、データベースに接続する単一のユーザーをラップする独自のコンテキストを取得します。データアクセスのために古い学校のADO .NETを使用することは変わりません。

3

これは一般的にいくつかのレベルで良いアイデアです。しかし、Begin_Requestイベントからインスタンス化を戻したいと思うかもしれません。統合されたパイプラインを使用すると、サイトへのリクエストごとにかなり高価なDBコンテキストを初期化することになります。 favicon.ico、すべてのスタイルシート、すべての画像を含みます。

何かが文脈を求めるときにインスタンス化するだけの、最も簡単で簡単な実装は、Ayende's example for NHibernate's ISessionです。適切なビットで置き換えてL2Sコンテキストをインスタンス化することができます。

関連する問題