![](/img/trans.png)
[英]OracleModificationCommandBatch.Consume() : Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException
[英]Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException
https://localhost:44322/api/Rentals/update 当我运行语句时,我在后端遇到这样的错误。
'数据库操作预计会影响 1 行,但实际上会影响 0 行。 自加载实体以来,数据可能已被修改或删除。 有关了解和处理的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962
我的 EntityRepository 在这里。
public void Update(TEntity entity)
{
using (TContext context = new TContext())
{
var updatedEntity = context.Entry(entity);
updatedEntity.State = EntityState.Modified;
context.SaveChanges();
}
}
我的 Sql 表在这里
CREATE TABLE [dbo].[Rentals] (
[RentalId] INT IDENTITY (1, 1) NOT NULL,
[CarId] INT NOT NULL,
[CustomerId] INT NOT NULL,
[RentDate] DATETIME NOT NULL,
[ReturnDate] DATETIME NULL,
CONSTRAINT [PK_RentalId] PRIMARY KEY CLUSTERED ([RentalId] ASC),
CONSTRAINT [FK_Rentals_Cars] FOREIGN KEY ([CarId]) REFERENCES [dbo].[Cars] ([CarId]),
CONSTRAINT [FK_Rentals_Customers] FOREIGN KEY ([CustomerId]) REFERENCES [dbo].[Customers] ([CustomerId])
);```
我的出租 Controller 在这里。
public IActionResult Update(Rental rental)
{
var result = _rentalService.Update(rental);
if (result.Success)
{
return Ok(result);
}
return BadRequest(result);
}
我在“发布”操作方面遇到问题,我无法弄清楚到底是什么问题。
看起来主键RentalId
没有设置。 在进行更新之前,您应该检查要更新的rental
实体的RentalId
属性是否存在于数据库中。 或者,您可以捕获异常并检查不存在的主键,然后采取相应措施。
代码片段示例(供替代):
public async Task<IActionResult> Update(Rental update)
{
_context.Entry(update).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!Exists(update.RentalId))
{
return NotFound();
}
throw;
}
return Updated(update);
}
private bool Exists(int id)
{
return _context.Rental.Any(e => e.RentalId == id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.