在渲染页面/控件中的Dispose之后访问DataContext

时间:2014-11-11 12:44:10

标签: c# database linq dispose lifecycle

我随机获取"在Dispose"之后访问DataContext错误,但仅限于aspx和ascx页面/控件。是否有一般规则我不应该在使用datacontexts的页面上调用内联方法?

我假设在页面呈现并调用方法时,datacontext已被处理?

e.g。在default.aspx

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

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

1 个答案:

答案 0 :(得分:1)

假设您正在使用它

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

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

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

或更改您的处理方法。我倾向于将我的上下文的生命周期绑定到封闭对象,在您的情况下,它将是ASP.NET Page对象。使上下文成为成员变量并将其丢弃在Page.Dispose