【发布时间】:2012-10-25 11:41:29
【问题描述】:
我想将 dbContext 的生命周期与会话的生命周期联系起来,例如,能够通过多个请求提交或放弃对 dbcontext 上的一组突变的更改。
还有其他(更好的?)方法可以做到这一点吗?如果不是,那么创建和处理上下文的合适机制是什么?我正在考虑在会话结束时进行清理的静态哈希表,但也许我做错了。我也在考虑只保留那些必须处理多个请求的上下文,并保留每个操作的其余部分的想法。有什么建议吗?
【问题讨论】:
-
有几件事,首先MVC没有会话的概念,它是MVC的很大一部分,它是无状态的,即请求之间没有状态。其次,我个人认为将 DBcontext 保持打开这么长时间是一个非常糟糕的主意,因为跟踪的对象越多,它越慢。这意味着您的用户在网站上停留的时间越长,您的用户体验就会越差。
-
您好,感谢您的反馈。你能建议另一种方法来解决这个问题吗?此外,我确实相信会议仍然可以发挥相当重要的作用。购物车、保持登录等等等等都是基于会话的——或者至少,我认为是。
-
如果您使用的是 IOC 容器,您可以将上下文的生命周期设置为每个 Web 请求。这样,如果您在同一请求中的多个位置使用上下文,您将使用相同的上下文实例。
-
@Martijn 通常使用 MVC 我们处理的事情有点不同,例如使用 Auth 我们使用 cookie 来维护状态,这给人一种持久登录的错觉。对于您的 DBcontext,我建议将部分模型传递给视图直到其完成,或者将该部分模型保存到数据库中。如果你对为什么 EF 会因为大量跟踪项目而变慢感兴趣,请在此处查看我的帖子:blog.staticvoid.co.nz/2012/05/…
标签: entity-framework asp.net-mvc-4 dbcontext