You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用方法返回数据到控制器报错“DbContext已释放,无法完成操作”

错误根因

该报错由Entity Framework的延迟执行特性触发:你在using代码块中仅构造了LINQ查询的表达式树,并未实际执行查询加载数据。当using块执行结束后,DbContext会被自动销毁释放,后续接口返回结果要遍历IEnumerable<Tab>加载数据时,已经没有可用的DbContext来执行查询操作,因此抛出该异常。

修复方法

只需在using块内部的查询表达式末尾,调用立即执行方法将数据提前加载到内存即可,可选ToList()、ToArray()等方法。

修改后的DashboardActions.cs代码

public IEnumerable<Tab> GetTabs()
{
    IEnumerable<Tab> recentPages = null;

    try
    {
        using (var context = new Clarity.BusinessLayer.CLARITY_DNN())
        {
            recentPages = (from t in context.Tabs
                           join tp in context.TabPermissions on t.TabID equals tp.TabID
                           where tp.RoleID == -1 && tp.AllowAccess && tp.PermissionID == 3
                          && !t.IsDeleted && t.IsVisible && t.PortalID == 0 &&
                          !string.IsNullOrEmpty(t.Description)
                           && t.TabName != "Home"
                           select t)
            .OrderByDescending(p => p.LastModifiedOnDate ?? p.CreatedOnDate)
            .Take(20)
            .ToList(); // 新增此行,立即执行查询将数据加载到内存
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

    return recentPages;
}
额外注意

如果Tab类包含需要用到的导航属性,需要在查询时通过Include()方法预加载对应导航属性,或者关闭上下文的延迟加载开关,避免后续遍历导航属性时再次触发上下文已释放的错误。

内容的提问来源于stack exchange,提问作者jmath412

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:06:03