Stor varning:INTE TESTAD - bara tänker högt.
EF stöder åsidosättande av SaveChanges
, så kanske ett alternativ är att definiera ett gränssnitt som:
interface IVersionedRow {
int RowVersion {get;set;}
}
och lägg till en int RowVersion
egenskap/fält till både modellklass(er) och databastabell(er), och använd partial class
för att implementera detta gränssnitt (med implicit gränssnittsimplementering):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Åsidosätt sedan SaveChanges
, något i stil med:
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);
}
som då ska fungera (i teorin - oprövad) som en manuellt implementerad radversionsräknare. Lämna ändringsvalidering aktiverad för RowVersion
, och det borde tjäna.