楽観的並行性チェックを実装しようとしています。私は一般的なリポジトリと作業単位のパターンを利用しています。
タイムスタンプ属性のプロパティ (バイト配列として) をエンティティに導入しました。これにより、データを更新するたびに値が自動的に増加します (データベースで管理されているようですが、これが本来の目的です)。
(オートマッパーを使用して) VM を実際のモデルにマッピングすることにより、ビュー モデルから更新された値を読み込みます。これにより、適切なタイプのエンティティの新しい (切り離された?) インスタンスが生成され、対応するすべてのフィールドが設定されます (タイムスタンプを含む)。
更新自体は次のように実行されます
i_oOldEntity = m_oDbSet.Find(i_oEntity.MaterialId)
context.Entry(i_oOldEntity).CurrentValues.SetValues(i_oEntity)
context.SaveChanges()
i_oEntity は自動マッピングされたエンティティです。
これにより、値自体は正常に更新されますが、ビューモデルからのタイムスタンプ値は完全に無視されます。結果の SQL コードでは、WHERE 句で最新の rowversion 値が使用されます。
要するに: EF の WHERE 句で使用されるビューモデルのタイムスタンプ値を取得するにはどうすればよいですか?