【发布时间】:2019-08-01 09:59:48
【问题描述】:
使用乐观并发更新数据库失败。检查分析器(SQL 服务器)似乎生成的语句总是检查 NULL
WHERE [ID] = @p10 AND [ROWVERSION] IS NULL;
而 ROWVERSION 类似于 0x000000000000B490。可能有什么问题? 感谢您的帮助!
【问题讨论】:
标签: asp.net-core concurrency entity-framework-core
使用乐观并发更新数据库失败。检查分析器(SQL 服务器)似乎生成的语句总是检查 NULL
WHERE [ID] = @p10 AND [ROWVERSION] IS NULL;
而 ROWVERSION 类似于 0x000000000000B490。可能有什么问题? 感谢您的帮助!
【问题讨论】:
标签: asp.net-core concurrency entity-framework-core
糟糕,它碰巧是一个更新的新对象,所以 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);
...
【讨论】: