在呈现页面/控件中的Dispose之后访问的DataContext

本文关键字:Dispose 之后 访问 DataContext 控件 | 更新日期: 2023-09-27 18:29:57

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

我假设在页面渲染和调用方法时,数据上下文已经被处理了?

例如,在default.aspx 上

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

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

在呈现页面/控件中的Dispose之后访问的DataContext

假设您像这样使用

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中处理它。dispose