【发布时间】:2013-09-18 18:28:54
【问题描述】:
我有一个处理“课程”的 MVC4 项目。整个应用程序中的许多页面都需要处理课程列表 - 用户配置文件需要拉出列表,/Courses 的索引视图需要拉出列表等。
由于几乎总是需要这些数据,因此我想将其作为初始请求的一部分加载,因此我只需查询数据库一次。
我想象一个场景,数据被放置在 Layout.cshtml 中,然后其他视图可以根据需要访问模型数据,尽管我没有看到实现这一点的明确方法。我想我可以把问题分成两部分:
- 获取加载到 Layout.cshtml 中的数据
- 从其他视图访问此数据
我在这两个方面都有点卡住 - 我怎样才能做到这一点?
【问题讨论】:
-
@AlexAr 那不是一回事
-
"所以我只需要查询一次数据库" -- 每个请求完全独立运行,所以无论你做什么,每次都会运行查询。当然,规则的例外是如果您实现某种形式的缓存;不过,关键在于,仅在比单个操作更高的级别运行查询本身并不能使其可用于所有其他操作,而无需再次运行查询。
-
@Chris - 我的意思是有一次参加课程。随后的调用将用于其他数据 - 每个会话只会加载一次课程。这有意义吗?
-
我就是这么说的。除非您使用 memcache 或其他东西显式缓存查询结果,并从该缓存加载查询的后续请求而不是向数据库发出查询,否则它将每次查询,即使它已经完成一直到 global.asax 级别——每个请求都是唯一的,并且不与最后一个共享任何内容。
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4