我正在使用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)
感谢。
答案 0 :(得分:1)
如果要检索任何计算列(StoreGeneratedPattern =“Computed”或“Identity”),底层提供程序应在INSERT或UPDATE语句之后立即发出SELECT语句。
在INSERT操作期间,Npgsql目前仅支持SERIAL。 它在UPDATE操作期间不支持计算列检索。消费者应该调用Refresh(RefreshMode.StoreWins,entity)来从数据源获取值。
这意味着当前版本的Npgsql提供程序不支持Optimistic Concurrency。