asp.net – 将linq连接到sql datacontext到业务层中的httpcontext
|
我需要我的 linq to sql datacontext在我的业务/数据层可用,以便我的所有存储库对象都可以访问.但是,由于这是一个Web应用程序,我想根据请求创建并销毁它.我想知道是否有一个可以懒惰创建并将datacontext附加到当前HttpContext的单例类可以工作.我的问题是:当请求结束时,datacontext会自动处理吗?以下是我正在思考的代码.这是否达到了我的目的:拥有一个可以延迟使用的线程安全的datacontext实例,并在请求结束时自动处理? public class SingletonDC
{
public static NorthwindDataContext Default
{
get
{
NorthwindDataContext defaultInstance = (NorthwindDataContext)System.Web.HttpContext.Current.Items["datacontext"];
if (defaultInstance == null)
{
defaultInstance = new NorthwindDataContext();
System.Web.HttpContext.Current.Items.Add("datacontext",defaultInstance);
}
return defaultInstance;
}
}
}
解决方法你想象的是有意义的 – 使用HTTP Request上下文存储东西 – 但是,当请求结束时,存储在当前HttpContext中的一次性对象不会自动神奇地被处理掉.你不得不以某种方式自己解决这个问题.有一个“结束请求”事件,您可以轻松地挂钩,例如使用您放入Global.asax.cs的代码.在Application_EndRequest()方法中,可以在需要它的列表中的每个对象上手动调用Dispose(). 一种方法是迭代上下文中的每个项目,测试IDisposable,然后在适当时调用Dispose. protected void Application_EndRequest(Object sender,EventArgs e)
{
foreach (var key in HttpContext.Current.Items.Keys)
{
var disposable = HttpContext.Current.Items[key] as IDisposable;
if (disposable != null)
{
disposable.Dispose();
HttpContext.Current.Items[key] = null;
}
}
}
我认为应该这样做. ASPNET不会自动为您执行此操作.当然,在真实应用程序中使用此代码之前,您需要保护免受异常等的影响. Vertigo的Keith Craig写了a relevant post on the topic a while ago,描述了你想要做什么作为一种模式,换句话说,一种做一些应该重复的事情.他提供了一个类来帮助解决这个问题,延迟加载DB上下文并将其放入当前上下文中.这种方法存在一些缺陷 – 您可以在该帖子的评论讨论中阅读它们.评论中还引用了一堆相关文章. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.net MVC DropDownList预选项目被忽略
- Asp.Net MVC 3 JSON模型绑定无法正常工作
- asp.net-mvc – 应用程序服务层作为静态类
- 存储ASP.NET会话变量的最佳解决方案是什么? StateServer还
- asp.net-mvc – MVC3 – 将字节数组发布到控制器 – Databa
- ASP.Net中的Vb6“Tag”属性等价物?
- asp.net-mvc – 部署的ASP.NET MVC 4项目不会运行
- asp.net-mvc-2 – 如何设置RadioButtonFor()在ASp.net MVC
- Owin错误与ASP.NET MVC应用程序
- asp.net-mvc – Asp.net Mvc:Ninject – IPrincipal
- asp.net – 您何时会在Web自定义控件上使用Web用
- asp.net-mvc-3 – 在App_code文件夹中使用razor
- asp.net – Linq更新记录
- asp.net-core – ASP.NET 5中RegisterObject / Q
- 如何在ASP.NET中设置TextBox中的对齐中心?
- asp.net – 缓存特定的Javascript和CSS文件
- asp.net-mvc – HTML.Hidden For value set
- asp.net-mvc – Asp.net MVC5,如何加载.hbs文件
- asp.net – 从Owin WebApi2返回描述性401消息
- asp.net页面SqlCacheDependency缓存实例
