在我正在构建的一个小型演示应用程序中,我将代码放在Global.Session_Start()事件中初始化数据库.但是,我注意到当我在开发服务器上的调试器中运行应用程序时,此事件不会触发(尚未在其他任何地方进行测试).
问题1:给出了什么?什么时候Session_Start()实际上被调用?我假设它是在会话开始时但是不应该每个新的请求序列的开始导致会话自动启动?当然,每当我使用F5运行时,会话应该开始,所以为什么不呢.
问题2:有一个更好的地方,初始化数据库的代码应该去哪里?我宁愿不把它放在Application_Start方法中,因为它在调试时并不总是被调用.
PS.通过初始化数据库,我并不是说我打开了与SqlServer的连接并让它永远打开.我正在使用db4o,我打开一个预先构建的数据库文件.就像我说这只是一个演示应用程序,我并不担心资源管理不善或类似的事情.
我知道这是一个老帖子,但也许这会对某人有所帮助:
除非您实际读取或写入会话对象,否则session_start不会触发.
如果您想使用session_start事件但根本不需要使用会话存储,则可以将以下内容添加到目标网页的页面指令中:
<%@ Page EnableSessionState="ReadOnly" %>
这将导致session_start事件触发,而您不必在会话对象中存储任何内容.