Velké upozornění:NEZKOUŠENO - jen přemýšlím nahlas.
EF podporuje přepsání SaveChanges
, takže jednou z možností je definovat rozhraní jako:
interface IVersionedRow {
int RowVersion {get;set;}
}
a přidejte int RowVersion
vlastnost/pole pro vaše modelové třídy a databázové tabulky a použijte partial class
k implementaci tohoto rozhraní (pomocí implementace implicitního rozhraní):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Poté přepište SaveChanges
, něco jako:
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);
}
který by pak měl fungovat (teoreticky - netestováno) jako ručně implementovaný čítač verzí řádku. Ponechte validaci změn povolenou pro RowVersion
, a to by mělo sloužit.