在我的最新项目中,我认为在整个应用程序中只有一个上下文可能更简单。我注意到当我加载一个需要多个查询的页面时,它可能会返回空结果。
例如,我有一份约会清单,然后是销售代表清单。他们表现得很好。然后我点击F5,有时一切都会保持良好状态,但有时约会和/或代表清单将是空的。
这是单个上下文应用程序的已知问题吗?那个设计是不好的?
答案 0 :(得分:6)
这是单个上下文应用程序的已知问题吗?那个设计是不好的?
我相信是的,通过简单的Web应用程序,您可能看不出差异,但对于具有许多用户且需要高容量货币的复杂Web应用程序,问题将是:
DbContext
实现工作单元模式,内部缓存内部,因此长时间保持全局DbContext会导致内存泄漏并从数据库中提取大量数据并将其保留在内存中(内部缓存)暂时。
认为工作单元是一个业务交易,工作单元中的内部缓存仅用于此事务,而不是全局,如果事务完成,应尽快处理工作单元。
Web应用程序中DbContext的最佳实践是将DbContext的生命周期保持为每个请求。如果使用IoC容器,大多数IoC容器都支持每个请求的生命周期管理。