簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM