0

ASP.NET MVC4 アプリケーションがあります。ユーザーが最初にアプリケーションにアクセスしたときに、一時テーブルを SQL Server にロードしたいと考えています。その後、ユーザーがアプリケーションを使用している間、同じ一時テーブルを使用し続けてほしいと思います。

一時テーブルをロードするこの特定のアクションが 1 回だけ実行されることを希望します。そうしないと、一時テーブルを再作成し、必要なく SQL に挿入することになります。そのユーザー (??) のインデックス ページが読み込まれます。そうでない場合、ASP.NET MVC でこれを処理するにはどうすればよいですか?

SQL Server のビットは、実際には問題ではありません。それは私がやっていることの概要です。私が知る必要があるのは、特定のコントローラー アクションがユーザー セッションの開始時に 1 回だけ実行されるようにする方法だけです。

再編集: 私は間違いを犯しました。私の質問はアプリケーションの範囲に関するものでしたが、ユーザー セッションの範囲にあるはずです。

4

3 に答える 3

1

Application_StartGlobal.asax でメソッドを使用できます。ただし、このコードはアプリケーションが起動するたびに実行されるため、おそらくテーブルが存在するかどうかを確認する必要があります。これは、次のコードで実行できます。

IF ( NOT EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'dbo' -- can be other schema
                 AND  TABLE_NAME = 'YOUR_TABLE'))
BEGIN
    --Create table insert rows, etc
END
于 2013-06-07T11:31:30.047 に答える
1

global.asax Session_start(Object sender, EventArgs E) および Session_End(Object sender, EventArgs E) で試す必要があります

session_Start でテーブルを作成し、Session_End() でテーブルを削除します。それが機能するかどうか教えてください

于 2013-06-07T14:15:58.127 に答える
0

私がやったことは、データのリポジトリを用意し、それをセッション変数に設定することです(セッションに関連付けられている限り、データベーステーブルなどでもかまいません)。次に、最初の呼び出しでデータストアからロードし、その時点からキャッシュ/セッションからロードします。例えば:

public SomeTableRepository
{
    private SomeTable _someTable;

    public SomeTable {
        get {
          if (_someTable != null)
              return _someTable;
          else if (Session["SomeTable"] != null)

              return (SomeTable)Session["SomeTable"];
          else
          {
              _someTable = GetDataFromDatabase();
              Session["SomeTable"] = _someTable;
              return _someTable;
          }
        }
        set {
            _someTable = value;
            Session["SomeTable"] = _someTable;
        }
    }
}
于 2013-06-07T13:26:46.123 に答える