Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Simultaneidade otimista com Entity Framework e MySQL


Grande advertência:NÃO TESTADO - apenas pensando em voz alta.

O EF oferece suporte à substituição de SaveChanges , então talvez uma opção seja definir uma interface como:
interface IVersionedRow {
    int RowVersion {get;set;}
}

e adicione um int RowVersion propriedade/campo para sua(s) classe(s) de modelo e a(s) tabela(s) do banco de dados e use partial class para implementar esta interface (usando implementação de interface implícita):
partial class Customer : IVersionedRow {}
partial class Order : IVersionedRow {}
...

Em seguida, substitua 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);
}

que deve funcionar (em teoria - não testado) como um contador de versão de linha implementado manualmente. Deixe a validação de alteração habilitada para RowVersion , e isso deve servir.