asp.net – 实体框架:Singletonish ObjectContext – Good,Bad
发布时间:2020-12-16 00:19:51 所属栏目:asp.Net 来源:网络整理
导读:我们的想法是创建一个暴露上下文但在Web应用程序中处理它的存储的类. 目前这就是我所拥有的: public class EntityContext{ private static String MAIN_CONTEXT_KEY = "MainContext"; private static TISQLEntities _context; public static void RemoveCon
我们的想法是创建一个暴露上下文但在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-3 – 如何在代码中检测属性是否使用HiddenInpu
- Hangfire在ASP.NET CORE中的简单实现
- ASP.NET Core使用Ping判断网络是否接通
- asp.net – aspx页面中的代码是否在Web应用程序中编译?
- asp-classic – ADODB.Stream错误’800a0bbc’写入文件失败
- 如何在ASP.NET中继器DataDataBound事件中访问数据源字段?
- asp.net-mvc – Html.DisplayFor不发布值到控制器在ASP.NET
- asp.net-core – db ASP.NET Core中的临时保存密码
- asp.net-mvc – ErrorAttribute vs OnException与Applicati
- ASP.NET网络表单的Nancy路由
推荐文章
站长推荐
- asp.net使用DataTable构造Json字符串的方法
- asp.net – 使用“使用本地IIS Web服务器”时出现
- 我不能在ASP.NET MVC中做的事情
- asp.net – SqlCacheDependency不起作用
- asp.net – Visual Studio开发服务器(2010)和NTL
- asp.net – 错误的System.Web.Mvc更新
- asp.net-mvc – ICommandHandler / IQueryHandle
- asp.net – 无法打开与SQL Server的连接
- asp.net-mvc – 在ASP.NET MVC中定制授权
- asp.net下文件上传和文件删除的代码
热点阅读