Groot voorbehoud:NIET GETEST - gewoon hardop denken.
EF ondersteunt het overschrijven van SaveChanges
, dus misschien is een optie om een interface te definiëren zoals:
interface IVersionedRow {
int RowVersion {get;set;}
}
en voeg een int RowVersion
. toe eigenschap/veld toe aan zowel uw modelklasse(n) als de databasetabel(len), en gebruik partial class
om deze interface te implementeren (met behulp van impliciete interface-implementatie):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Overschrijf vervolgens SaveChanges
, zoiets als:
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);
}
die zou dan (in theorie - niet getest) moeten functioneren als een handmatig geïmplementeerde rijversieteller. Laat wijzigingsvalidatie ingeschakeld voor RowVersion
, en dat zou moeten dienen.