0

我有一个 ASP.NET MVC4 应用程序。当用户第一次访问应用程序时,我想在 SQL Server 上加载一个临时表。之后,我希望用户在使用应用程序时继续使用同一个临时表。

我希望加载我的临时表的这个特定操作只运行一次 - 否则我会在不需要的情况下重新创建临时表和 sql 上的插入 - 所以我认为有必要基本上找出它是否是我的第一次为该用户加载索引页面(??),如果是这样,我该怎么做?如果没有,我该如何使用 ASP.NET MVC 处理这个问题?

SQL Server 位对于这个问题真的无关紧要。这只是对我正在做的事情的概述。我需要知道的是如何确保我的特定控制器操作只运行一次并且在我的用户会话开始时运行

重新编辑:我犯了一个错误,我的问题是关于应用程序的范围,而它应该是关于用户会话的范围。

4

3 回答 3

1

You can use Application_Start method in Global.asax. But this code will run everytime you application starts, so probably you have to check if table exist. You can do this with following code:

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 回答