【发布时间】:2023-03-09 12:53:01
【问题描述】:
我目前面临一个我目前似乎可以解决的问题。
我们在数据库中有一个用于文章的表。保存后 - 对不同的供应商进行 API 调用,该供应商将在一段时间后使用他们的订单号更新该行的列。
但是,如果呼叫被延迟并且用户正在编辑文章,他们将收到 ConflictChangeException,其中只是表示文章已被更改,他们必须关闭并重新打开它。
现在我想捕获异常,如果冲突的原因是该供应商更改了列以使用 RefreshMode 做一些魔术,但如果不是,则仍然抛出异常,因为另一个用户更改了文章。
最大的问题是 SQL 服务器 timestamp 或 row-version(你有什么)将众所周知的棍子放在方向盘上。在使用来自供应商的新订单号进行更新之前,我无法重新加载这些值,因为该 timestamp 列中仍然存在冲突。
在 LINQ to SQL 模型中,timestamp 属性设置为
<Column(Storage:="_Timestamp", AutoSync:=AutoSync.Always, DbType:="rowversion NOT NULL", CanBeNull:=false, IsDbGenerated:=true, IsVersion:=true, UpdateCheck:=UpdateCheck.Never)> _
由于UpdateCheck 设置为从不,IsDbGenerated 设置为true,我认为 LINQ 在发生冲突时会忽略它,但不会。
这是一个失败的原因吗?我是否只需要不断告诉用户进行了更改并且他们必须重新加载?
【问题讨论】:
标签: sql-server vb.net linq