![](/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.