首页 > 解决方案 > 操作无法完成,因为 DbContext 已在 Web API 中释放

问题描述

我的 api 调用抛出异常“操作无法完成,因为 DbContext 已被释放”。请指导如何解决它..

在名为 Common Class 的单独类中定义的函数

public IQueryable productquery()
    {
        try
        {
            using (ERPEntities db = new ERPEntities())
            {
                db.Configuration.ProxyCreationEnabled = false;
                var query = db.Products.OrderBy(x => x.ID).AsQueryable();
                var list = query.Skip(10).Take(50).AsQueryable();
                return list;
            }
        }
        catch (Exception ex)
        {
            throw;
        };
    }

普通函数到 api 控制器的函数调用

[HttpPost]
    public IHttpActionResult GetProducts()
    {
        try
        {
            var result = _commonFunctions.productquery();
            var resultf = result.Include(x => x.Catagory).ToList();
            return Ok(resultf);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    } 

标签: c#asp.net-mvc

解决方案


在您的 DbContext 被处置后,您正试图包含一个实体。

var resultf = result.Include(x => x.Catagory).ToList();

但是您使用using内部 productquery() 方法调用 DbContext 。如果您想继续这样做,您应该在 using 部分完成所有 db 操作。

var query = db.Products.Include(x => x.Catagory).OrderBy(x => x.ID).AsQueryable();

推荐阅读