【发布时间】:2010-03-05 01:28:48
【问题描述】:
我们有一个多层的 Asp.NET Web 窗体应用程序。数据层有一个名为DataAccess 的类,它实现IDisposable,并有一个我们的实体框架对象上下文的实例作为私有字段。该类有许多返回各种实体集合的公共方法,并在释放时释放其对象上下文。
由于我们一直面临的许多问题,我们决定将对象上下文(或DataAccess 的实例)在服务器上的范围内保持更长时间是一个很大的优势。有人建议在 this post 的 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];
}
干杯。
【问题讨论】:
标签: asp.net entity-framework session httpcontext objectcontext