1

我使用實體框架,模型優先,自我跟蹤實體和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

如果有任何計算列(StoreGeneratedPattern =「Computed」或「Identity」)要檢索,底層提供者應在INSERT或UPDATE語句之後立即發出SELECT語句。

Npgsql當前僅在INSERT操作期間支持SERIAL。 它在UPDATE操作期間不支持計算列檢索。消費者應該調用Refresh(RefreshMode.StoreWins,entity)從數據源獲取值。

這意味着Optimistic Concurrency在當前版本的Npgsql提供程序中不受支持。