【问题标题】:DataContext accessed after Dispose in render pages/controls在呈现页面/控件中 Dispose 后访问的 DataContext
【发布时间】:2014-11-11 12:44:10
【问题描述】:

我随机收到“Dispose 后访问的 DataContext”错误,但仅限于 aspx 和 ascx 页面/控件。是否有一般规则我不应该在使用数据上下文的页面上调用内联方法?

我假设在页面呈现并调用 datacontext 已经被释放的方法时?

例如在 default.aspx 上

<%= CurrentContent.GetText("Intro") %>

CurrentContent实际上是default.aspx.cs中引用的数据库对象

【问题讨论】:

    标签: c# database linq dispose lifecycle


    【解决方案1】:

    假设你是这样使用它的

    using (MyDbContext ctx = new MyDbContext())
    {
        return from r in ctx.Table select r;
    }
    

    延迟执行是发生在您身上的事情。该查询不会立即执行,并且仅在最终使用返回的枚举器时运行 - 在这种情况下,是在 using 块处理您的上下文之后。如果您想确保不会发生这种情况,请将您的查询模式更改为

    using (MyDbContext ctx = new MyDbContext())
    {
        return (from r in ctx.Table select r).ToList();
    }
    

    或更改您的处理方法。我倾向于将上下文的生命周期与封闭对象联系起来,在您的情况下,该对象就是 ASP.NET Page 对象。使上下文成为成员变量并在 Page.Dispose 中处理它

    【讨论】:

    • 非常感谢 wyz。我想知道即使您将其列为列表,它是否会在 using 语句中考虑到这一点。很高兴看到它。这与一些通用的设计重新组合似乎已经解决了这个问题。
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多