我有以下方法Item为某些用户添加或更新类型的实体.此方法是Service类的一部分,为每个请求创建一个新实例.
public async Task SaveItem(int userId, string name)
{
var item = await _context.Items.Where(i => i.UserId == userId).SingleOrDefaultAsync();
if (item == null)
{
item = new Item
{
UserId = userId,
Name = name
};
_context.Items.Add(item);
}
else
{
item.Name = name;
_context.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
await _context.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)
问题是两个并发请求可能为同一用户创建两个无效的项目.对我来说,它看起来像一个非常常见的代码片段,我想知道处理这种并发问题的默认方式是什么.