1

出于性能优化的原因,我正在重构我的 ASP.NET MVC 4 WebAPI 项目。在我的控制器代码中,我在上下文(DbContext、EF6)中搜索实体。有几千个这样的实体,每小时添加新的实体(即“缓慢”),它们很少被删除(我不在乎是否仍然在上下文的缓存中找到已删除的实体!)并且永远不会修改的。

在阅读了这个问题的答案、这个和其他几个讨论的答案之后,我仍然不确定将单个静态 DbContext 用于上述目的是一个坏主意 - 一个从不更新数据库的 DbContext。

在性能方面,我不担心实例化成本,而是担心如果为每个请求创建 DbContext 缓存请求实体的无用性。我还使用了二级缓存,这使得上下文的持久性更加尖锐。

我的问题是: 1. 无论具体实现如何,在我的情况下,“静态”DbContext 是一个有效的解决方案吗?2. 如果是这样,实现这种 DbContext 的最合适的方式是什么?3.我是否应该定期“刷新”上下文以清除缓存以防止 if 变得太大?

4

1 回答 1

0

DbContext 在您获取/查询数据时缓存实体实例。它确保不同的查询返回相同的数据映射到相同的实体(基于类型和 id)。否则,如果您在不同的对象实例中修改相同的实体,上下文将不知道哪个具有正确的数据。因此,静态 DbContext 会随着时间的推移而爆炸,直到进程崩溃。

DbContexts 应该是短暂的。Request.Properties 是在 Web API 中保存它的好地方(映射到 IIS 中的 HttpContext.Items)。

于 2013-11-02T18:15:32.087 回答