LINQ to SQL的DataContext的Web应用程序(linq to sql dataco

2019-10-20 12:26发布

我试图使用LINQ to SQL中我的项目(很短的期限内),和我在一个绑定是一种。 我不知道有没有每个请求线程得心应手数据上下文的最好方法。

我想是从我的所有库类可以访问当前数据上下文一个单独的类。 但是,单例类是静态的,不是线程安全的,因此不适合于Web应用程序。 我想要的东西,会在请求的开始创建一个数据上下文,并请求一起处置。

任何人都可以请他们分享解决这个问题? 我一直在寻找一个解决方案,我发现从里克施特拉尔好的帖子: http://www.west-wind.com/weblog/posts/246222.aspx但我不完全理解他的线程安全或业务对象的方法。 如果有人有自己的线程安全方式的简化版本,我很想去看看。

Answer 1:

在Global.asax中的BeginRequest事件,你可以将其存储在HttpContext.Current.Items这有点像一个“会话状态”为单独的请求。 每个请求得到它自己的范围内,所以没有线程的问题,如果你是存储每个请求一个新的DataContext。

您可以在EndRequest事件处置它。

http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx

然而,如果你打算在即使没有习惯它的每一个请求中创建的DataContext这不会很好地扩展。 相反,你可以做,做延迟初始化的静态方法。

(对不起,在iPhone上输入这个代码...我知道...)

private static MyDataContext GetDataContext() {
    var dc = HttpContext.Current.Items["dc"] as MyDataContext;
    if (dc==null) {
        dc = new MyDataContext();
        HttpContext.Current.Items.Add("dc", dc);
    }
    return dc;
}


文章来源: linq to sql datacontext for a web application