繁体   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