1

我正在使用实体框架、模型优先、带有 Npgsql 提供程序的自我跟踪实体(VS2010 - .NET 4 目标)。

我正在尝试跟踪乐观并发异常,但我的问题是,一旦实体中的列被标记为固定,OptimisticConcurrencyException即使受影响的行> 0,也会引发 an。

在这里进行了一些挖掘之后,我想知道为什么实体框架通过dbCommand.ExecuteReader(CommandBehavior.SequentialAccess)后跟 adbDataReader.Read()而不是dbCommand.ExecuteNonQuery()命令文本是简单的更新语句时发出更新命令?

UPDATE "schema"."table" 
SET "bool_column" = FALSE 
WHERE ("id" = 7526) AND ("xmin" = 1249804)

谢谢。

4

1 回答 1

1

如果要检索任何计算列(StoreGeneratedPattern = "Computed" 或 "Identity"),则基础提供程序应在 INSERT 或 UPDATE 语句之后立即发出 SELECT 语句。

Npgsql 目前在 INSERT 操作期间仅支持 SERIAL。它不支持在 UPDATE 操作期间检索计算列。消费者应调用 Refresh(RefreshMode.StoreWins, entity) 从数据源获取值。

这意味着当前版本的 Npgsql 提供程序不支持乐观并发。

于 2012-07-19T14:20:15.767 回答