我试图使用LINQ to SQL中我的项目(很短的期限内),和我在一个绑定是一种。 我不知道有没有每个请求线程得心应手数据上下文的最好方法。
我想是从我的所有库类可以访问当前数据上下文一个单独的类。 但是,单例类是静态的,不是线程安全的,因此不适合于Web应用程序。 我想要的东西,会在请求的开始创建一个数据上下文,并请求一起处置。
任何人都可以请他们分享解决这个问题? 我一直在寻找一个解决方案,我发现从里克施特拉尔好的帖子: http://www.west-wind.com/weblog/posts/246222.aspx但我不完全理解他的线程安全或业务对象的方法。 如果有人有自己的线程安全方式的简化版本,我很想去看看。
在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;
}