sql >> Database >  >> RDS >> Mysql

Optimistische gelijktijdigheid met Entity Framework en MySQL

Groot voorbehoud:NIET GETEST - gewoon hardop denken.

EF ondersteunt het overschrijven van SaveChanges , dus misschien is een optie om een ​​interface te definiëren zoals:

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

en voeg een int RowVersion . toe eigenschap/veld toe aan zowel uw modelklasse(n) als de databasetabel(len), en gebruik partial class om deze interface te implementeren (met behulp van impliciete interface-implementatie):

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

Overschrijf vervolgens SaveChanges , zoiets als:

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

die zou dan (in theorie - niet getest) moeten functioneren als een handmatig geïmplementeerde rijversieteller. Laat wijzigingsvalidatie ingeschakeld voor RowVersion , en dat zou moeten dienen.



  1. SQL Server 2005 Hoe creëer je een unieke beperking?

  2. voeg meerdere velden in met behulp van foreach-lus

  3. Hoe selecteer je maximaal 3 items per gebruiker in MySQL?

  4. Meerdere rijen samenvoegen en groeperen in Oracle