大きな警告:テストされていません -ただ声を出して考えます。
EFは、 SaveChanges
のオーバーライドをサポートしています。
したがって、おそらく1つのオプションは、次のようなインターフェイスを定義することです。
interface IVersionedRow {
int RowVersion {get;set;}
}
int RowVersion
を追加します プロパティ/フィールドをモデルクラスとデータベーステーブルの両方に追加し、partial class
を使用します このインターフェースを実装するには(暗黙のインターフェース実装を使用):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
次に、SaveChanges
をオーバーライドします 、次のようなもの:
public override int SaveChanges(SaveOptions options)
{
foreach (ObjectStateEntry entry in
ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
{
var v = entry.Entity as IVersionedRow;
if(v != null) v.RowVersion++;
}
return base.SaveChanges(options);
}
その後、手動で実装された行バージョンカウンターとして機能するはずです(理論的にはテストされていません)。 RowVersion
の変更検証を有効のままにします 、そしてそれは役立つはずです。