Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymistyczna współbieżność z Entity Framework i MySQL

Duże zastrzeżenie:NIETESTOWANE - po prostu głośno myśląc.

EF obsługuje zastępowanie SaveChanges , więc być może jedną z opcji jest zdefiniowanie interfejsu, takiego jak:

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

i dodaj int RowVersion właściwość/pole zarówno do klasy(-y) modelu, jak i do tabeli(-y) bazy danych i użyj partial class aby zaimplementować ten interfejs (przy użyciu niejawnej implementacji interfejsu):

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

Następnie zastąp SaveChanges , coś takiego:

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

który powinien wtedy funkcjonować (teoretycznie - nieprzetestowany) jako ręcznie zaimplementowany licznik wersji wiersza. Pozostaw włączoną walidację zmian dla RowVersion i to powinno służyć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wizualne tworzenie baz danych za pomocą MySQL Workbench

  2. Jak uruchomić zapytanie RAW SQL w PhalconPHP

  3. Nie można utworzyć modelu danych encji — przy użyciu MySql i EF6

  4. Tworzenie kolumny sumy skumulowanej w MySQL

  5. Używanie kluczy i wartości tablic do tworzenia instrukcji sql select