我正在处理一个项目,在这个项目中,对于是否要在HTTP中缓存EF 6 DBContext,我们会产生矛盾。
对于每个HTTP请求,我们实例化了多个类,并且可以在每个类上调用多个方法。
每个类实例中是否最好有一个DBContext实例,或者在HTTPContext.Cache中缓存单个in上下文可以吗?
其他因素:
发布于 2014-05-12 15:18:20
不要在请求之间缓存上下文实例。它们被设计成在一个小的范围内使用和处理。缓存的上下文将“泄漏”(或者更确切地说,消耗越来越多)内存,因为它从应用程序的所有查询和提交中积累了所有更改跟踪数据。
在使用Web应用程序时,请在每个请求中使用上下文实例。
同一份文件还提到:
上下文不是线程安全的。只要同一实体类的实例不被多个上下文同时跟踪,仍然可以创建多线程应用程序。
这完全排除了共享上下文,因为请求由ThreadPool的多个线程提供服务。
下面是如何在MVC应用程序中实现每个请求的共享上下文:
Global.asax:
public class MvcApplication : System.Web.HttpApplication
{
public const string dbcontext = "Db.Context";
public MvcApplication()
{
BeginRequest += MvcApplication_BeginRequest;
EndRequest += MvcApplication_EndRequest;
}
void MvcApplication_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Items[dbcontext] = new BlahContext();
}
void MvcApplication_EndRequest(object sender, EventArgs e)
{
var ctx = HttpContext.Current.Items[dbcontext] as BlahContext;
if (ctx != null)
try
{
(ctx as IDisposable).Dispose();
}
catch (ObjectDisposedException)
{
//yum
}
}
}https://stackoverflow.com/questions/23612797
复制相似问题