【发布时间】:2012-09-05 12:58:45
【问题描述】:
我有一些问题here 和here ASP.NET MVC3 应用程序中的状态管理。其中一个答案提到,一个选项是简单地将每个步骤的状态存储在数据库中。
我想知道是否有人对通常如何实现这一点有任何建议,因为当我第一次向我建议时,我有一些想法。
无效实体
考虑一个包含 3 个步骤的多步骤表单(向导)。我可以将每个步骤保存在数据库中以维护状态,但用户可以在该过程中途关闭 Web 应用程序,使我的数据库包含处于无效状态的实体。
为了克服这个问题,我可以在表中添加一个字段来指示向导是否已完成。可以定期审查任何不一致的项目,并在需要时自动删除,例如如果在一天结束时在数据库中发现任何无效实体,它们将被自动删除。
这样做的问题是我必须向表中添加字段以存储有关应用程序的元数据。每个存储在多步骤表单中输入的信息的表都需要具有这些字段。这对我来说似乎是错误的。一种解决方案可能是创建一个特定的表来管理它,而不是用元数据污染每个实体表。
中间数据库
我想在我的应用程序和“真实”数据库之间建立一个数据库。 中间数据库将具有存储每个“步骤”的状态信息的表,并且只有当最后一步完成时,此信息才会传输到“真实”数据库(以及从中间删除的临时数据)。
这听起来也类似于 ASP.NET 已经提供的会话状态选项之一,所以我个人认为这会浪费时间。
在其他应用程序(例如桌面)中使用
目前,我的应用程序完全基于 Web,但我计划让桌面程序能够与同一个数据库进行交互。如果数据库具有 Web 应用程序用于存储状态的大量元数据,我的桌面应用程序需要知道这一点以避免任何错误(即我的桌面应用程序需要知道它必须设置实体状态为“有效”,以便 Web 应用程序不会在一天结束时删除该实体,因为它认为它是无效的)。
总结
那么有没有人有任何关于如何最好地使用数据库来存储应用程序状态的信息或提示?
- 数据库选项很常见吗?
- 它是否适合具有大量实体的大型应用程序?
- 对性能有影响吗?
编辑
为了清楚起见,我知道在 ASP.NET MVC 应用程序中管理状态存在其他选项(TempData、缓存和会话),但我对有关使用数据库管理状态的信息特别感兴趣。
请不要对任何提到其他选项的人投反对票,因为我最初的问题可能对此并不清楚。
【问题讨论】:
标签: asp.net-mvc-3 database-design wizard