sql >> Base de Datos >  >> RDS >> Mysql

Simultaneidad optimista con Entity Framework y MySQL

Gran advertencia:NO PROBADO - Solo pensando en voz alta.

EF admite la anulación de SaveChanges , por lo que quizás una opción sea definir una interfaz como:

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

y agregue un int RowVersion propiedad/campo tanto para su(s) clase(s) modelo(s) como para la(s) tabla(s) de la base de datos, y use partial class para implementar esta interfaz (usando la implementación de interfaz implícita):

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

Luego anula SaveChanges , algo como:

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

eso debería funcionar (en teoría, no probado) como un contador de versión de fila implementado manualmente. Deje la validación de cambios habilitada para RowVersion , y eso debería servir.