Große Einschränkung:NICHT GETESTET - nur laut denken.
EF unterstützt das Überschreiben von SaveChanges
, also besteht vielleicht eine Option darin, eine Schnittstelle zu definieren, wie zum Beispiel:
interface IVersionedRow {
int RowVersion {get;set;}
}
und fügen Sie eine int RowVersion
hinzu Eigenschaft/Feld sowohl für Ihre Modellklasse(n) als auch für die Datenbanktabelle(n) und verwenden Sie partial class
um diese Schnittstelle zu implementieren (unter Verwendung der impliziten Schnittstellenimplementierung):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...
Überschreiben Sie dann SaveChanges
, etwas wie:
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);
}
das sollte dann (in der Theorie - ungetestet) als manuell implementierter Zeilenversionszähler funktionieren. Lassen Sie die Änderungsvalidierung für RowVersion
aktiviert , und das sollte reichen.