Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将我的DataContext存储在会话内存中是个好主意吗?_C#_Asp.net - Fatal编程技术网

C# 将我的DataContext存储在会话内存中是个好主意吗?

C# 将我的DataContext存储在会话内存中是个好主意吗?,c#,asp.net,C#,Asp.net,我正在写一个非常简单的ASP.net项目。它使用Linq2Sql数据上下文来访问存储过程。有一个IDisposable类,它在构造函数中创建一个新的DataContext,并在其dispose中处理它 只要有可能,我就将请求分组到: using(var dc = new MyDataAccessClass()) { //All the data requests in here } // Do stuff with the data here 因

我正在写一个非常简单的ASP.net项目。它使用Linq2Sql数据上下文来访问存储过程。有一个IDisposable类,它在构造函数中创建一个新的DataContext,并在其dispose中处理它

只要有可能,我就将请求分组到:

    using(var dc = new MyDataAccessClass())
    {
       //All the data requests in here
    }

    // Do stuff with the data here
因此,在整个代码中,大部分都是在UserControls中,我在想,在起始页(或母版页)的PageLoad中创建一个DataAccess类,将其存储在会话内存中,并在所有UserControls中引用等等,是否有意义,然后在预渲染阶段处理它

我的问题是,这是个坏主意吗?我想这会涉及到一些到数据库的悬空连接,因为异常或调试会停止PreRender的运行。 也许对母版页的加载进行检查,看看会话变量中是否有任何内容,如果有,则对其进行处理,这样可以对其进行排序


或者,是否有一种更智能的方法可以在整个页面生命周期中共享数据上下文,而不让DBA用键盘敲击您?

在ASP.NET中,最好是使用依赖项注入框架为每个请求创建一次


请参见,例如,

会话很可能不是一个好主意-您必须担心并发性、恢复断开的连接等。此外,在预渲染中处理上下文的方法也不是最好的,因为在出现异常的情况下,预渲染处理程序将永远不会执行

>代码>系统.Web.HtpCurrord.Neal.NET.<代码>是ASP.NET中唯一一个仅在一个请求持续时间内生存的存储区,也是在ASP.NET请求在执行期间在不同线程之间传输的罕见情况下处理的。


您可以使用global.asax中的
Application\u EndRequest
event来始终正确地处理您的连接(EndRequest在出错后也会被调用)。

看看这个awser:@FelipeOriani Dang,我保证我花了很长的60秒来寻找一个副本。很抱歉。我认为在会话中存储上下文是个坏主意。我不知道这是否是最佳做法,但您可以将其存储在System.Web.HttpContext.Current.Items中。至少它只有请求范围。