Grande avvertenza:NON TESTATO - solo pensando ad alta voce.
EF supporta l'override di SaveChanges
, quindi forse un'opzione è definire un'interfaccia come:
interface IVersionedRow {
int RowVersion {get;set;}
}
e aggiungi una int RowVersion
proprietà/campo sia alle classi del modello che alle tabelle del database e utilizzare partial class
per implementare questa interfaccia (usando l'implementazione dell'interfaccia implicita):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Quindi sovrascrivi SaveChanges
, qualcosa come:
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);
}
che dovrebbe quindi funzionare (in teoria - non testato) come contatore di versioni di riga implementato manualmente. Lascia la convalida delle modifiche abilitata per RowVersion
, e questo dovrebbe servire.