System.ObjectDisposeException:'无法访问已处置的上下文实例。使用 SaveChangesAsync()

问题描述 投票:0回答:1

我有两个控制器,一个处理产品,另一个处理该产品的报告。 他们都需要保存到数据库,一个修改或添加产品,第二个跟踪更改。

第一控制器:

public async Task<IActionResult> PutCustomer(int id, Customer customer)
{
    if (id != customer.Id)
    {
        return BadRequest();
    }
    var existCustomer = _context.Customer.Where(x => x.FNumber == customer.FNumber).FirstOrDefault();
    //existCustomer.LastModifiedBy = HttpContext.GetIISServerVariable("LOGON_USER");
    existCustomer.LastModifiedOn = DateTime.Now;
    var oldFeatures = existCustomer.Features.Split(",");
    var newFeatures = customer.Features.Split(",");
    var  featuresRemoved = oldFeatures.Except(newFeatures);
    var featuresAdded = newFeatures.Except(oldFeatures);
    existCustomer.Features = customer.Features;
    _context.Entry(existCustomer).State = EntityState.Modified;
    
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!CustomerExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }
    addReport(existCustomer, featuresRemoved, featuresAdded);

    return NoContent();
}


addReport 基本上创建报表对象并调用 PostReport。

第二个控制器冷:

public async Task<ActionResult<Report>> PostReport(Report report)
{
    _context.Report.Add(report);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetReport", new { id = report.Id }, report);
}

但是当它返回到 PostReport 时,我收到一个错误,表明上下文已被释放。

网上的一个解决方案是使用

SaveChangesAsync()
,但我已经使用了。

请问有什么解决办法吗? 谢谢你

c# asp.net asynchronous
1个回答
0
投票

通过将第二个控制器中的

SaveChangesAsync
更改为
SaveChanges
解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.