在我的最新项目中,我认为在整个应用程序中只有一个上下文可能会更简单。我注意到,当我加载需要多个查询的页面时,它可能会返回空结果。
例如,我有一个约会列表,然后是一个销售代表列表。他们表现得很好。然后我按 F5,有时一切都会好起来,但有时约会和/或代表列表会是空的。
这是单一上下文应用程序的已知问题吗?那个设计是坏的吗?
在我的最新项目中,我认为在整个应用程序中只有一个上下文可能会更简单。我注意到,当我加载需要多个查询的页面时,它可能会返回空结果。
例如,我有一个约会列表,然后是一个销售代表列表。他们表现得很好。然后我按 F5,有时一切都会好起来,但有时约会和/或代表列表会是空的。
这是单一上下文应用程序的已知问题吗?那个设计是坏的吗?
这是单一上下文应用程序的已知问题吗?那个设计是坏的吗?
我相信是的,对于简单的 Web 应用程序,您可能看不出区别,但是对于具有许多用户且需要高并发的复杂 Web 应用程序,问题将是:
DbContext
在底层实现了工作单元模式,内部有内部缓存,因此长时间保持全局 DbContext 会导致内存泄漏并从数据库中提取大量数据并暂时将它们保存在内存中(内部缓存)。
想想 Unit Of Work 是一个业务事务,Unit Of Work 中的内部缓存只是为了这个事务,而不是全局的,如果事务完成了,Unit Of Work 应该尽快处理掉。
Web 应用程序中 DbContext 的最佳实践是根据请求保持 DbContext 的生命周期。如果使用 IoC 容器,大多数 IoC 容器都支持按请求生命周期管理。