Asp.net Linq到SQL-跨回发保留数据上下文?

Asp.net Linq到SQL-跨回发保留数据上下文?,asp.net,linq-to-sql,postback,datacontext,Asp.net,Linq To Sql,Postback,Datacontext,我读了一篇关于DataContext生命周期管理的帖子,以及其他一些关于Stackoverflow的相关问题。如果他们有我问题的答案,我一定错过了 我通常遵循原子方法,在需要时为工作单元实例化DataContext,然后进行处理。在我遇到一个复杂页面的场景之前,这个页面包含一个多视图控件,多个网格和弹出面板都代表一个工作单元。数据在内存中(我实际上将根对象填充到会话中,这样整个层次结构就可以跨回发了)。显然,当用户单击“保存”时,DataContext早已消失 一开始引起了我的注意,因为这似乎是

我读了一篇关于DataContext生命周期管理的帖子,以及其他一些关于Stackoverflow的相关问题。如果他们有我问题的答案,我一定错过了

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

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

因此,就我看来,我没有多少选择

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

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

我的建议是使用您的第一个要点,反序列化/序列化对象,然后将其重新附加到新上下文


我过去就用过这种方法,它对我很有效。我认为您将遇到较少的问题,并且前面的实现会更简单。

在研究了Linq对象的序列化以及关联和循环引用的问题之后,我认为我将手工编写Save方法,然后遍历树。。。