我有一个ASP.NET MVC4应用程序。我想在用户首次访问应用程序时在SQL Server上加载临时表。在那之后,我希望用户在申请时保持使用相同的临时表。
我希望加载我的临时表的这个特定操作只运行一次 - 否则我将重新创建临时表和sql上的插入而不需要 - 所以我认为有必要基本找出它是否是第一次为该用户加载我的索引页面(??),如果是这样,我该怎么做?如果没有,我如何处理ASP.NET MVC?
SQL Server位对于这个问题并不重要。这只是我正在做的事情的概述。我需要知道的是我如何确保我的特定控制器操作仅在我的用户会话开始时运行一次。
重新编辑:我犯了一个错误,我的问题是关于应用程序的范围,而它应该在用户会话的范围内。
答案 0 :(得分:1)
您可以在Global.asax中使用Application_Start
方法。但是这个代码将在每次应用程序启动时运行,因此可能需要检查表是否存在。
您可以使用以下代码执行此操作:
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
答案 1 :(得分:1)
你应该尝试使用global.asax Session_start(Object sender,EventArgs E)和Session_End(Object sender,EventArgs E)
在session_Start中创建表,在Session_End()中删除表。 告诉我,如果有效
答案 2 :(得分: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;
}
}
}