Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Optimistische Parallelität mit Entity Framework und MySQL

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.