我有两个控制器,一个处理产品,另一个处理该产品的报告。 他们都需要保存到数据库,一个修改或添加产品,第二个跟踪更改。
第一控制器:
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()
,但我已经使用了。
请问有什么解决办法吗? 谢谢你
通过将第二个控制器中的
SaveChangesAsync
更改为 SaveChanges
解决了问题。