sql >> Database teknologi >  >> RDS >> Mysql

Optimistisk samtidighed med Entity Framework og MySQL

Stor advarsel:IKKE TESTET - tænker bare højt.

EF understøtter tilsidesættelse af SaveChanges , så måske er en mulighed at definere en grænseflade såsom:

interface IVersionedRow {
    int RowVersion {get;set;}
}

og tilføje en int RowVersion egenskab/felt til både din(e) modelklasse(r) og databasetabellen(erne), og brug partial class at implementere denne grænseflade (ved at bruge implicit grænsefladeimplementering):

partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...

Tilsidesæt derefter SaveChanges , noget som:

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);
}

der så skulle fungere (i teorien - utestet) som en manuelt implementeret rækkeversionstæller. Lad ændringsvalidering være aktiveret for RowVersion , og det burde tjene.



  1. Sådan implementeres PostgreSQL på DigitalOcean

  2. Opret tabel i MySQL, der matcher en anden tabel?

  3. Problem med MySQL-standardværdi

  4. MySQL-korreleret underforespørgsel i JOIN-syntaks