sql >> Databáze >  >> RDS >> Mysql

Optimistická souběžnost s Entity Framework a MySQL

Velké upozornění:NEZKOUŠENO - jen přemýšlím nahlas.

EF podporuje přepsání SaveChanges , takže jednou z možností je definovat rozhraní jako:

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

a přidejte int RowVersion vlastnost/pole pro vaše modelové třídy a databázové tabulky a použijte partial class k implementaci tohoto rozhraní (pomocí implementace implicitního rozhraní):

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

Poté přepište SaveChanges , něco jako:

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

který by pak měl fungovat (teoreticky - netestováno) jako ručně implementovaný čítač verzí řádku. Ponechte validaci změn povolenou pro RowVersion , a to by mělo sloužit.



  1. MariaDB KROMĚ Vysvětlení operátora

  2. Vyberte 3 nejnovější záznamy, kde jsou hodnoty jednoho sloupce odlišné

  3. jak získat sloupec podobný rowNum v sqlite IPHONE

  4. Existuje efektivnější způsob stránkování v Hibernate než provádění výběrových a počítání dotazů?