【问题标题】:Linq to SQL - Retain DataContext across post-backs?Linq to SQL - 在回发中保留 DataContext?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 在研究了 Linq 对象的序列化以及关联和循环引用的问题之后,我想我将手动编写 Save 方法,然后遍历树...
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多