Grosse mise en garde :NON TESTÉ - juste penser à haute voix.
EF prend en charge le remplacement de SaveChanges
, alors peut-être qu'une option consiste à définir une interface telle que :
interface IVersionedRow {
int RowVersion {get;set;}
}
et ajoutez un int RowVersion
propriété/champ à la fois à votre ou vos classes de modèle et à la ou aux tables de base de données, et utilisez partial class
pour implémenter cette interface (en utilisant l'implémentation d'interface implicite) :
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Remplacez ensuite SaveChanges
, quelque chose comme :
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);
}
qui devrait alors fonctionner (en théorie - non testé) comme un compteur de version de ligne implémenté manuellement. Laissez la validation des modifications activée pour RowVersion
, et cela devrait servir.