Peringatan besar:TIDAK DIUJI - hanya berpikir keras.
EF mendukung penggantian SaveChanges
, jadi mungkin salah satu opsinya adalah mendefinisikan antarmuka seperti:
interface IVersionedRow {
int RowVersion {get;set;}
}
dan tambahkan int RowVersion
properti/bidang ke kelas model Anda dan tabel database, dan gunakan partial class
untuk mengimplementasikan antarmuka ini (menggunakan implementasi antarmuka implisit):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Kemudian timpa SaveChanges
, sesuatu seperti:
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);
}
yang kemudian akan berfungsi (secara teori - belum teruji) sebagai penghitung versi baris yang diimplementasikan secara manual. Biarkan validasi perubahan diaktifkan untuk RowVersion
, dan itu akan berfungsi.