Gran advertencia:NO PROBADO - Solo pensando en voz alta.
EF admite la anulación de SaveChanges
, por lo que quizás una opción sea definir una interfaz como:
interface IVersionedRow {
int RowVersion {get;set;}
}
y agregue un int RowVersion
propiedad/campo tanto para su(s) clase(s) modelo(s) como para la(s) tabla(s) de la base de datos, y use partial class
para implementar esta interfaz (usando la implementación de interfaz implícita):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Luego anula SaveChanges
, algo como:
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);
}
eso debería funcionar (en teoría, no probado) como un contador de versión de fila implementado manualmente. Deje la validación de cambios habilitada para RowVersion
, y eso debería servir.