0

私は MVC3 アプリケーションを構築しており、DAL の SQL に Linq を使用しています。私の DAL は MyDataReader と呼ばれ、datacontext の作成/初期化を処理し、データベースからデータを取得するすべてのメソッドを定義します。すべてのメソッドはインスタンス メソッドであるため、メソッドを呼び出すには、MyDataReader オブジェクトをインスタンス化する必要があります。

私の質問は、私の DAL でメソッドを呼び出す最良の方法は何ですか。最初は、DAL メソッドを呼び出す必要があるたびに、コントローラーから MyDataReader オブジェクトをインスタンス化していました。その後、MyDataReader オブジェクトをインスタンス化するたびに、datacontext オブジェクトが作成され、接続が確立されることに気付きました。

2 番目のアプローチでは、次のように Global.asax ファイルに静的パラメーターを作成しました。

public class MvcApplication : System.Web.HttpApplication
{

        public static MyDataReader reader;
        protected void Application_Start()
         {
            reader = new MyDataReader();
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
         }
}

これにより、データベースの初期化操作が最小限に制限されます。次の方法で、すべてのコントローラーから DAL メソッドを呼び出すことができます。

MvcApplication.reader.CallTheMethod()

これは良い方法ですか?DAL メソッドを呼び出す最良の方法は何ですか?

4

1 に答える 1

2

いいえ、これは絶対に最悪の方法です。最大の理由は、静的オブジェクトがすべての同時ユーザー間で共有されることです。これは、複数のユーザーが同じコンテキストを追加、削除、クエリすることを意味します。これは災害の元凶であり、おそらくデータ破損の原因となります。

もう 1 つの問題は、データ コンテキストが短命になるように設計されているため、内部キャッシュとリストを管理せず、操作が完了したらそれらを破棄することを想定しているだけです。

接続管理について心配する必要はありません。内部的には、これは接続プールで管理され、.net は自動的に接続を再利用し、一定期間アイドル状態になるとそれらを破棄します。

時期尚早に最適化しないでください。あなたは通常間違っています。

于 2012-10-05T17:39:05.673 に答える