sql >> データベース >  >> RDS >> Mysql

EntityFrameworkおよびMySQLとの楽観的同時実行性

    大きな警告:テストされていません -ただ声を出して考えます。

    EFは、 SaveChangesのオーバーライドをサポートしています。 したがって、おそらく1つのオプションは、次のようなインターフェイスを定義することです。

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

    int RowVersionを追加します プロパティ/フィールドをモデルクラスとデータベーステーブルの両方に追加し、partial classを使用します このインターフェースを実装するには(暗黙のインターフェース実装を使用):

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

    次に、SaveChangesをオーバーライドします 、次のようなもの:

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

    その後、手動で実装された行バージョンカウンターとして機能するはずです(理論的にはテストされていません)。 RowVersionの変更検証を有効のままにします 、そしてそれは役立つはずです。



    1. MySQLのリストのサブセットに対する選択

    2. MySQLエラー1264:列の値が範囲外です

    3. 列数が行1の値数と一致しません

    4. MYSQLテーブルを永続的な方法でソートする方法は?