【发布时间】:2010-06-17 11:40:52
【问题描述】:
我有一个 EF4/ASP.NET Web 应用程序,它的结构是使用 POCO 和通用存储库,基本上基于 excellent article。
该应用程序相对复杂,其中一个页面涉及选择和链接多个实体以构建复杂的用户配置文件。这需要访问多个实体类型(大约 20 个)和跨多个帖子的关联存储库。
当第一次访问存储库时,它使用现有的数据上下文(如果存在),否则它会创建一个新的上下文。问题是,如果上下文的生命周期只是每个请求(如文章中所建议),那么您必须处理多个上下文以及从上下文中分离和附加实体的复杂性。
我的解决方案是通过创建一个视图模型来共享帖子之间的上下文,该模型包括所有必需的存储库(初始化为共享相同的上下文)以及任何关联的数据,并将此模型存储在 Session 变量中,从后续页面上的 Session 中检索要求。因此,在保存配置文件之前,在所有帖子中保持相同的上下文。
这很好,但我担心我实际上并不确切知道模型会话变量中存储的内容,或者更重要的是会话变量的大小。
所以我想有两个问题:首先我应该寻找一个更好的解决方案来处理跨帖子问题的共享上下文(欢迎任何建议)?其次,当包含存储库和上下文时,Session 中实际存储了什么?
【问题讨论】:
-
好问题。我即将面临同样的问题,但我还没有真正进入细节。我主要关心如何使用 ajax 请求处理子实体的编辑,同时仍然保持随时取消整个事务的能力。到目前为止,我认为我最终可能不得不将整个事情放在 Session 中,在每个帖子上对其进行操作,然后在将来的某个时间点调用 SaveChanges(),但我还不确定。
标签: .net asp.net-mvc entity-framework session entity-framework-4