linq to sql datacontext for web application

时间:2010-03-20 04:42:14

标签: asp.net linq-to-sql datacontext

我正在尝试使用linq来为我的项目使用sql(非常短的截止日期),而且我有点陷入困境。我不知道为每个请求线程提供数据上下文的最佳方法。

我想要一个类似单例类的东西,我的所有存储库类都可以从中访问当前的数据上下文。但是,singleton类是静态的,不是线程安全的,因此不适合Web应用程序。我想要在请求开始时创建数据上下文并将其与请求一起处理。

任何人都可以分享他们对这个问题的解决方案吗?我一直在寻找解决方案,我找到了Rick Strahl的一篇好文章:http://www.west-wind.com/weblog/posts/246222.aspx但我并不完全理解他的线程安全或业务对象方法。如果某人有他的线程安全方法的简化版本,我很乐意看看。

1 个答案:

答案 0 :(得分:0)

在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;
}