小编Nik*_*sel的帖子

ASP.NET Web API - 用于更新实体的线程安全逻辑

我有以下方法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)

问题是两个并发请求可能为同一用户创建两个无效的项目.对我来说,它看起来像一个非常常见的代码片段,我想知道处理这种并发问题的默认方式是什么.

c# asp.net multithreading entity-framework asp.net-web-api

6
推荐指数
1
解决办法
923
查看次数