避免在get / post处理中重复访问数据库

时间:2012-05-08 12:20:01

标签: c# asp.net-mvc

我正在使用asp.net MVC 3:

我有一个视图,其输入字段是在GET请求期间动态生成的(它们是从数据库中检索的)。在POST期间,如果验证失败,我必须重新显示字段,然后再次检索它们。有没有办法避免冗余数据库访问,即有没有办法在GET和POST请求之间共享一些数据?

3 个答案:

答案 0 :(得分:1)

有办法处理这个问题,比如在TempData或Session等中存储数据......但我认为你不应该这样做。您应该始终重新查询数据访问层并获取它。这并不意味着您总是查询db表。您的数据访问层可以为缓存中的数据提供数据,也可以对表进行查询。

幕后,TempData使用Session来保存值。 TempData的值一直存在,直到读取或会话超时为止。以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用。

答案 1 :(得分:0)

不是直接,但是是。

如果您发布表单时,您将所有数据发送回服务器,然后将数据发送到模型,您的模型将拥有填充其字段所需的所有数据。

通过ajax发布以接收json数据,以及从ajax检索结果时  您只填充已更改的字段。

但是,我不认为重新查询是一个很大的交易,除非你谈论几秒或更长时间的特别痛苦的查询。

哦,不要将数据存储在会话或缓存中。没有理由用单个帖子阻塞ram,如果你错误地重用会话密钥,这可能会在以后打开潜在的问题。

答案 2 :(得分:0)

我认为你想要的是'懒加载'。

创建一个static变量(在执行数据库查询的类中),它将在数据库查询发生时存储结果,但最初应该是null。然后创建一个getter方法,检查此static变量是否为null。如果是null,则运行数据库查询并存储结果,否则只返回static var的内容。然后总是使用那个吸气剂,你就定了。

我知道特别迂腐的人对使用这样的static变量感到畏惧......但它运作良好,并且没什么大惊小怪的。