Linq to SQL - 跨帖子保留DataContext?

时间:2009-09-28 12:53:27

标签: asp.net linq-to-sql postback datacontext

我阅读了关于DataContext生命周期管理的Rick Strahl's帖子,以及关于Stackoverflow的一些其他相关问题。如果他们回答了我的问题,我一定错过了。

我通常遵循原子方法,并在需要时为一个工作单元实例化一个DataContext,然后将其处理掉。这很有效,直到我遇到一个包含多视图控件的复杂页面的场景,其中多个网格和弹出面板都代表一个工作单元。数据存储在内存中(实际上我将根对象填充到会话中,以便整个层次结构可以在后备文件中使用)。显然,当用户点击“保存”时,DataContext早已消失。

Tom Brune's comment一开始引起了我的注意,因为它似乎是一种优雅的方法 - 使用反射“润湿”对象的新副本并使用新的DataContext更新数据库。但是,关于这种方法的Rick's concerns是有效的,而且由于我的数据结构复杂且层次分明,我认为我不会尝试这种方法。

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

  • 使用Rick的建议反序列化/序列化对象并将其重新附加到新的上下文
  • 手动编码比较和更新对象的新副本的逻辑

我应该遵循哪一个,是否有第三个选项,即我可以在回发之间保留DataContext吗?如果这是可行的,那将需要最少量的编码,因为我的根对象有十几个孩子。

1 个答案:

答案 0 :(得分:1)

我的建议是在那里使用你的第一个项目符号并反序列化/序列化该对象,然后将其重新附加到新的上下文中。

我过去曾使用过这种方法,但它对我来说效果很好。我认为你会遇到更少的问题,并且可以更容易地实施。