.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 关键字来检查数据的重复性。
我想要的是在数据库中不存在该名称的情况下创建数据,但是,当我使用 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 关键字来检查数据的重复性。