【问题标题】:Optimistic concurrency: always checks RowVersion IS NULL乐观并发:总是检查 RowVersion IS NULL
【发布时间】:2019-08-01 09:59:48
【问题描述】:

使用乐观并发更新数据库失败。检查分析器(SQL 服务器)似乎生成的语句总是检查 NULL

WHERE [ID] = @p10 AND [ROWVERSION] IS NULL;

而 ROWVERSION 类似于 0x000000000000B490。可能有什么问题? 感谢您的帮助!

【问题讨论】:

    标签: asp.net-core concurrency entity-framework-core


    【解决方案1】:

    糟糕,它碰巧是一个更新的新对象,所以 ROWVERSION 为 NULL。比如:

        public async Task<IActionResult> Edit(int id, [Bind("stuff")] MyObject obj)
        {
            if (id != obj.Id)
            {
                return NotFound();
            }
    
            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(obj);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException ex)
                ...
    

    所以,最好在更新之前分配正确的 ROWVERSION

        public async Task<IActionResult> Edit(int id, byte[] rowVersion, [Bind("stuff")] MyObject obj)
        ...
        _context.Entry(myObj).Property("Rowversion").OriginalValue = rowVersion;
        _context.Update(obj);
        ...
    

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多