asp.net – 实体框架:Singletonish ObjectContext – Good,Bad还是Overth
发布时间:2020-05-23 19:43:05 所属栏目:asp.Net 来源:互联网
导读:我们的想法是创建一个暴露上下文但在Web应用程序中处理它的存储的类. 目前这就是我所拥有的: public class EntityContext{ private static String MAIN_CONTEXT_KEY = MainContext; private static TISQLEntities _context; public static v
|
我们的想法是创建一个暴露上下文但在Web应用程序中处理它的存储的类. 目前这就是我所拥有的: public class EntityContext
{
private static String MAIN_CONTEXT_KEY = "MainContext";
private static TISQLEntities _context;
public static void RemoveContext()
{
if (
HttpContext.Current != null
&&
HttpContext.Current.Items[MAIN_CONTEXT_KEY] != null
)
{
((TISQLEntities)HttpContext.Current.Items[MAIN_CONTEXT_KEY]).Dispose();
HttpContext.Current.Items[MAIN_CONTEXT_KEY] = null;
}
if (_context != null)
{
_context.Dispose();
_context = null;
}
}
public static TISQLEntities Context
{
get
{
if (HttpContext.Current == null)
{
if (_context == null)
{
_context = new TISQLEntities();
}
return _context;
}
if (HttpContext.Current.Items[MAIN_CONTEXT_KEY] == null)
{
HttpContext.Current.Items[MAIN_CONTEXT_KEY] = new TISQLEntities();
}
return (TISQLEntities)HttpContext.Current.Items[MAIN_CONTEXT_KEY];
}
}
}
然后在Global.asax文件中: protected void Application_EndRequest(object sender,EventArgs e)
{
EntityContext.RemoveContext();
}
我们的想法是,如果使用Web应用程序运行,则首先需要创建上下文(并保存到当前的HttpContext),并在请求结束时将其拆除. 如果这是一个UnitTest情况,它就会在第一次需要时被创建并在TestCleanup中删除(在这篇文章中并不重要,只是想澄清_context对象). 现在,这背后的想法至少不必这样做: using(TISQLEntities context = new TISQLEntities())
{
....
}
每次我想查询.我意识到这可能是我的懒惰,但我只是认为它更容易和更清洁: EntityContext.Context.User.Select(...) 并避免在大多数情况下我试图避免使用“使用”.最重要的是,我不会为每个回发创建9001个上下文. 现在我很好奇的是,我在想这个吗?我应该继续为每个需要的方法创建一个上下文吗?在帖子上说我必须: >从ID获取用户 这可能需要至少3个上下文.实体框架是否足够智能,可以随时继续创建上下文? 解决方法您正在为每个请求模式实现相当于NHibernate的会话,这是NHibernate中的一个很好的构造.虽然我不能100%确定它适用于EF,但最有可能的是.进一步扩展其他会话管理模式的是每个业务对话的会话,它允许NHibernate通过断开和重新连接会话而不是销毁和创建来延长在HttpSession持续时间内持有会话.如果EF允许类似的能力而不是保持静态打开连接,那么您可以通过我的个人资料查看我在博客上使用AOP实现该模式的方式.(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET MVC与Facebook Connect模板项目
- 如何部署/发布ASP.NET网站?
- asp.net 大文件上传 之 改版了的SlickUpload.HttpUploadMod
- asp.net-mvc – 使用mvc的主要目的
- asp.net – 如何在web.config中读取会话状态信息
- asp.net-mvc – ASP.NET MVC 5模型绑定编辑视图
- 清除ASP.net窗体中的所有字段
- asp.net – RedirectToAction MVC2的问题 – 不能将类型“S
- asp.net-mvc-3 – ActionButton而不是ActionLink
- asp经典 – 经典ASP文本替换和UTF-8编码
推荐文章
站长推荐
- asp.net-mvc – ASP.NET MVC FluentValidation P
- asp.net – 从div标签中引发回发事件
- asp.net-mvc – 实体框架4.3 无效的列名称“Crea
- asp.net – 动态创建的DropDownList在Postback上
- 有没有办法将一个onclick事件添加到ASP.NET标签服
- asp.net-mvc-5 – 在MVC 5的IPasswordStore中,Se
- asp.net-mvc – 如何让Visual Studio 2012检测虚
- asp.net core 实现一个简单的仓储的方法
- 如何阻止ASP.NET Menu控件生成内联html样式元素
- asp.net-mvc – 逐渐将现有的ASP.NET站点转换为M
热点阅读
