Entity Framework如何检测受update语句影响的行

时间:2012-07-18 15:27:47

标签: entity-framework ef-model-first optimistic-concurrency

我正在使用Entity Framework,模型优先,使用Npgsql提供程序自我跟踪实体(VS2010 - .NET 4目标)。

我正在尝试跟踪乐观并发异常,但我的问题是,只要实体中的列被标记为已修复,就会引发OptimisticConcurrencyException,即使受影响的行> 0

在挖掘exposed here之后,我想知道为什么实体框架在命令文本时通过dbCommand.ExecuteReader(CommandBehavior.SequentialAccess)发出更新命令后跟dbDataReader.Read()而不是dbCommand.ExecuteNonQuery()是一个简单的更新声明?

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

这意味着当前版本的Npgsql提供程序不支持Optimistic Concurrency。