2009-09-28 108 views
3

我读了Rick Strahl's关于DataContext生命周期管理的帖子,以及关于Stackoverflow的其他一些相关问题。如果他们回答了我的问题,我一定错过了。Linq to SQL - 跨Back-backs保留DataContext?

我通常遵循原子方法,并在需要时为工作单元实例化DataContext,并在之后进行处置。这很好,直到我点击一个复杂页面的场景,该页面包含一个多视图控件,并带有几个网格和弹出面板,这些面板都代表一个工作单元。数据存储在内存中(实际上,我将根对象填充到会话中,以便整个分层结构在后备中可用)。很明显,当用户点击“保存”时,DataContext已经过时了。

Tom Brune's comment起初引起了我的注意,因为它看起来像这样一种优雅的方法 - 使用反射来“湿”对象的新副本并使用新的DataContext更新数据库。然而,关于这种方法的Rick's concerns是有效的,并且由于我的数据结构是复杂和分层的,所以我不认为我会试试这个。

所以我剩下几个选项,据我所知。

  • 要么使用Rick的建议,反序列化/序列化对象,并将其重新连接到一个新的上下文
  • 手工代码进行比较,并更新对象

的全新副本逻辑哪我应该关注一下,还有第三种选择,也就是说我可以在后台之间保留DataContext吗?如果这是可行的,那么将需要最少量的编码,因为我的根对象有大约十几个孩子。

回答

1

我的建议是将你的第一个重点放在那里,反序列化/序列化对象,然后重新将它附加到新的上下文中。

我以前使用过这种方法,它对我来说效果很好。我想你会遇到更少的问题,并提前实施更容易。

+1

查看Linq对象的序列化以及关联和循环引用的问题之后,我想我会手动编写Save方法,然后走树... – cdonner 2009-09-28 13:30:48