1

Npgsqlプロバイダー(VS2010-.NET 4ターゲット)でエンティティフレームワーク、モデルファースト、自己追跡エンティティを使用しています。

楽観的同時実行性の例外を追跡しようとしていますが、問題はOptimisticConcurrencyException、影響を受ける行が0より大きい場合でも、エンティティの列が固定としてマークされるとすぐにanが発生することです。

ここでいくつか掘り下げた後、コマンドテキストが単純な更新ステートメントである場合の代わりに、Entity Frameworkが更新コマンドを発行し、dbCommand.ExecuteReader(CommandBehavior.SequentialAccess)その後に続く理由を知りたいですか?dbDataReader.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 に答える