sql >> Databasteknik >  >> RDS >> Mysql

Optimistisk samtidighet med Entity Framework och MySQL

Stor varning:INTE TESTAD - bara tänker högt.

EF stöder åsidosättande av SaveChanges , så kanske ett alternativ är att definiera ett gränssnitt som:

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

och lägg till en int RowVersion egenskap/fält till både modellklass(er) och databastabell(er), och använd partial class för att implementera detta gränssnitt (med implicit gränssnittsimplementering):

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

Åsidosätt sedan SaveChanges , något i stil med:

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

som då ska fungera (i teorin - oprövad) som en manuellt implementerad radversionsräknare. Lämna ändringsvalidering aktiverad för RowVersion , och det borde tjäna.



  1. Hämta ID för en infogat post:Php &MS SQL SERVER

  2. Är det nödvändigt att kassera DbCommand efter användning?

  3. Problem med SQLiteOpenHelper på Android 2.X och 3.X

  4. Hur ger man Trigger-genererat värde till Hibernate ValueObject?