我读了Rick Strahl's关于DataContext生命周期管理的帖子,以及关于Stackoverflow的其他一些相关问题。如果他们回答了我的问题,我一定错过了。Linq to SQL - 跨Back-backs保留DataContext?
我通常遵循原子方法,并在需要时为工作单元实例化DataContext,并在之后进行处置。这很好,直到我点击一个复杂页面的场景,该页面包含一个多视图控件,并带有几个网格和弹出面板,这些面板都代表一个工作单元。数据存储在内存中(实际上,我将根对象填充到会话中,以便整个分层结构在后备中可用)。很明显,当用户点击“保存”时,DataContext已经过时了。
Tom Brune's comment起初引起了我的注意,因为它看起来像这样一种优雅的方法 - 使用反射来“湿”对象的新副本并使用新的DataContext更新数据库。然而,关于这种方法的Rick's concerns是有效的,并且由于我的数据结构是复杂和分层的,所以我不认为我会试试这个。
所以我剩下几个选项,据我所知。
- 要么使用Rick的建议,反序列化/序列化对象,并将其重新连接到一个新的上下文
- 手工代码进行比较,并更新对象
的全新副本逻辑哪我应该关注一下,还有第三种选择,也就是说我可以在后台之间保留DataContext吗?如果这是可行的,那么将需要最少量的编码,因为我的根对象有大约十几个孩子。
查看Linq对象的序列化以及关联和循环引用的问题之后,我想我会手动编写Save方法,然后走树... – cdonner 2009-09-28 13:30:48