我们有一个表,其中有一个名为
Version
的列,该列被映射为 SQL rowversion
。这样做是因为我们有一个外部系统映射到我们的数据,该系统依赖于每次更新表时都会更改的列。最初我们希望这由 SQL 处理,但现在我们发现我们有乐观并发异常。虽然这些异常是为了保护数据被覆盖,但对于我们的情况,我们并不关心这一点。我们只是希望 timestamp
继续递增,而 Entity Framework 不检查它是否存在并发问题。
有什么办法吗?
映射:
Property(t => t.Version).IsRowVersion();
默认情况下,EF 暗示行版本类型是乐观并发标记(包含在乐观并发检查中)。
您可以使用
IsConcurrencyToken
流畅的 API 覆盖该行为:
Property(t => t.Version).IsRowVersion().IsConcurrencyToken(false);
在 EF 核心中添加
IsConcurrencyToken(false)
会将列类型从 rowversion
更改为 varbinary(max)
.
相反,您应该将
IsRowVersion()
替换为 HasColumnType("rowversion")
,如下所示:
Property(e => e.LastUpdatedRowVer).HasColumnType("rowversion").ValueGeneratedOnAddOrUpdate();