c# - 仅对一个上下文使用 DbContext

标签 c# asp.net-mvc entity-framework dbcontext

在我的最新项目中,我认为在整个应用程序中只有一个上下文可能会更简单。我注意到当我加载一个需要多个查询的页面时,它可能会返回空结果。

例如,我有一个约会列表,然后是一个销售代表列表。他们表现得很好。然后我按 F5,有时一切都会保持正常,但有时约会和/或代表列表将是空的。

这是单一上下文应用程序的已知问题吗?这个设计不好吗?

最佳答案

Is that a known issue with the single context apps? Is that design a bad one?

我相信是的,对于简单的 Web 应用程序,您可能看不出区别,但是对于具有许多用户且需要高并发性的复杂 Web 应用程序,问题将是:

DbContext 在底层实现了工作单元模式,里面有内部缓存,所以长时间保持全局 DbContext 会导致内存泄漏并从数据库中提取大量数据并将它们保存在内存中(内部缓存)暂时。

想想Unit Of Work是一个业务事务,Unit Of Work的内部缓存只是针对这个事务,而不是全局的,如果事务完成了,Unit Of Work应该尽快处理。

Web 应用程序中 DbContext 的最佳实践是保持 DbContext 的生命周期为每个请求。如果您使用 IoC 容器,大多数 IoC 容器都支持按请求生命周期管理。

关于c# - 仅对一个上下文使用 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361330/

相关文章:

c# - 为什么我的 EF 似乎从正在运行的 SQL View 中返回重复的行?

c# - Entity Framework Eager 只加载其他表的一个子集

c# - HttpWebRequest.AllowAutoRedirect=false 会导致超时?

jquery - 下载 jquery.numeric.js 文件

asp.net-mvc - asp.net mvc 用户负载测试

asp.net-mvc - datetime2数据类型到datetime数据类型的转换导致超出范围的值

c# - 该流不支持seek操作,使用stream

javascript - 使用 Ajax 从 C# 检索二进制数据

c# - 在 .NET 中,事件将在哪个线程中处理?

c# - EntityFramework 保存约束