【发布时间】:2009-09-28 12:53:26
【问题描述】:
我阅读了 Rick Strahl's 关于 DataContext 生命周期管理的帖子,以及 Stackoverflow 上的一些其他相关问题。如果他们包含我的问题的答案,我一定错过了它。
我通常遵循原子方法,并在需要时为一个工作单元实例化一个 DataContext,然后再将其处理掉。这很有效,直到我遇到一个复杂页面的场景,该页面包含一个多视图控件,其中包含多个网格和弹出面板,它们都代表一个工作单元。数据在内存中(我实际上将根对象填充到会话中,以便整个层次结构在回发中可用)。显然,当用户点击“保存”时,DataContext 早已不复存在。
Tom Brune's comment 起初引起了我的注意,因为它看起来是一种非常优雅的方法——使用反射来“润湿”对象的新副本并使用新的 DataContext 更新数据库。但是,Rick's concerns 关于这种方法是有效的,而且由于我的数据结构复杂且分层,我不认为我会尝试这个。
因此,据我所知,我的选择很少。
- 要么使用 Rick 的建议来反序列化/序列化对象并将其重新附加到新的上下文中
- 手工编码比较和更新对象的新副本的逻辑
我应该遵循哪一个,还有第三种选择,即我可以在回发之间保留 DataContext 吗?如果这是可行的,它将需要最少的编码,因为我的根对象有大约十几个孩子。
【问题讨论】:
标签: asp.net linq-to-sql postback datacontext