我们有一个多层的 Asp.NET Web 窗体应用程序。数据层有一个名为的类DataAccess
,它实现IDisposable
并具有我们的实体框架对象上下文的实例作为私有字段。该类有许多返回各种实体集合的公共方法,并在释放时释放其对象上下文。
由于我们一直面临的许多问题,我们认为将对象上下文(或 的实例DataAccess
)在服务器上的范围内保持更长时间将是一个很大的优势。有人建议在这篇文章HttpContext.Current.Items
的集合中保留一个实例,以便每个 Http 请求都有一个实例。
我想知道的是:将我们的对象上下文的实例存储在对象中会产生什么问题/关注/问题HttpContext.Current.Session
????
- 我假设 Session 对象已完成并在用户会话到期时设置为垃圾收集,因此实例将被正确处理。
- 我假设大多数默认浏览器设置将让我们的应用程序毫无疑虑地放置其 SessionId cookie。
- 对象上下文将处理的数据量并不巨大,并且不会对我们体面的服务器硬件构成问题,随着时间的推移缓存和相对较少的并发用户。
这将相对较快地实施,并且不会影响我们许多现有的单元测试。
我们将使用 AutoFac 和 ServiceProvider 类来提供实例。当需要 ObjectContext 的实例时,它将由类似于以下的代码返回:
private static Entities GetEntities(IContext context)
{
if (HttpContext.Current == null)
{
return new Entities();
}
if (HttpContext.Current.Session[entitiesKeyString] == null)
{
HttpContext.Current.Session[entitiesKeyString] = new Entities();
}
return (Entities)HttpContext.Current.Session[entitiesKeyString];
}
干杯。