Большое предупреждение: НЕ ИСПЫТАНО - просто мысли вслух.
EF поддерживает переопределение SaveChanges
, поэтому, возможно, один из вариантовопределить интерфейс, такой как:
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
, и это должно послужить.