Entity Framework IsRowVersion() 没有并发检查

问题描述 投票:0回答:2

我们有一个表,其中有一个名为

Version
的列,该列被映射为 SQL
rowversion
。这样做是因为我们有一个外部系统映射到我们的数据,该系统依赖于每次更新表时都会更改的列。最初我们希望这由 SQL 处理,但现在我们发现我们有乐观并发异常。虽然这些异常是为了保护数据被覆盖,但对于我们的情况,我们并不关心这一点。我们只是希望
timestamp
继续递增,而 Entity Framework 不检查它是否存在并发问题。

有什么办法吗?

映射:

Property(t => t.Version).IsRowVersion();
c# sql-server entity-framework concurrency
2个回答
8
投票

默认情况下,EF 暗示行版本类型是乐观并发标记(包含在乐观并发检查中)。

您可以使用

IsConcurrencyToken
流畅的 API 覆盖该行为:

Property(t => t.Version).IsRowVersion().IsConcurrencyToken(false);

0
投票

在 EF 核心中添加

IsConcurrencyToken(false)
会将列类型从
rowversion
更改为
varbinary(max)
.

相反,您应该将

IsRowVersion()
替换为
HasColumnType("rowversion")
,如下所示:

Property(e => e.LastUpdatedRowVer).HasColumnType("rowversion").ValueGeneratedOnAddOrUpdate();
© www.soinside.com 2019 - 2024. All rights reserved.