Grande advertência:NÃO TESTADO - apenas pensando em voz alta.
O EF oferece suporte à substituição de
SaveChanges
, então talvez uma opção seja definir uma interface como:interface IVersionedRow {
int RowVersion {get;set;}
}
e adicione um
int RowVersion
propriedade/campo para sua(s) classe(s) de modelo e a(s) tabela(s) do banco de dados e use partial class
para implementar esta interface (usando implementação de interface implícita):partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Em seguida, substitua
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);
}
que deve funcionar (em teoria - não testado) como um contador de versão de linha implementado manualmente. Deixe a validação de alteração habilitada para
RowVersion
, e isso deve servir.