.net web api 插入多个相同的数据

.net web api insert multiple same data

我想要的是在数据库中不存在该名称的情况下创建数据,但是,当我使用 ajax 请求测试代码时,它有时会创建多个具有相同名称的数据。 我在想,原因是第一个数据和第二个数据同时到达数据库。有什么办法可以解决这个问题吗?

    [HttpPut]
    public async Task<IActionResult> Put(string name)
    {
        if (name == null)
            return BadRequest();

        View view = await _context.Views
            .FirstOrDefaultAsync(v => v.PageName.ToLower() == name.ToLower());

        if (view != null)
        {
            view.NumOfViews++;

            await _context.SaveChangesAsync();
                
            return Ok(new { view, status = 200 });
        }
        else
        {
            //not exist in db create a new one
            View newView = new View
            {
                PageName = name,
                NumOfViews = 1
            };

            view = await _viewHelper.CreateAsync(newView);

            return CreatedAtAction("Put",new { status=201, view});
        }
    }

有几种方法可以做到这一点。例如,您可以在数据库上开始事务以锁定 table。或者尝试防止来自前端的双重请求(顺便说一句,可能带有取消令牌)。或者尝试在您的 Startup class 上的一段时间内禁用双重请求。 那你需要什么?这是为了防止双击您的前端?

例如,这是来自 Dapper for Transactions 的一些代码片段:

 using System.Transactions;    
....    
using (var transactionScope = new TransactionScope())
{
    DoYourDapperWork();
    transactionScope.Complete();
}

如果名称在table中是唯一的,您可以添加数据库级别的限制。使用事务保存值并在保存更改之前检查重复项。

在插入数据库之前,您可以使用 if exists 关键字来检查数据的重复性。