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

MySqlでEntityFramework6を使用したDbUpdateConcurrencyException

    DBタイムスタンプ/行バージョン機能を使用する必要があります。EFでは、ByteArrayを宣言し、それを同時実行性チェックフィールドとして指定します。DBは作成時に値を設定します。以降のすべての更新では、値hasntchangedDBが必要に応じてrowversionを更新するかどうかを確認できます。このアプローチはSQLサーバーで機能します。MYSqlでも同じように動作するはずです。

        public  abstract class BaseObject  {
        [Key]
        [Required]
        public virtual int Id { set; get; }
    
        [ConcurrencyCheck()]
        public virtual byte[] RowVersion { get; set; }
    
        }
    

    または、必要に応じて流暢に// Primary Keythis.HasKey(t => t.Id);

            // Properties
            //Id is an int allocated by DB , with string keys, no db generation now
            this.Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); // default to db generated
    
            this.Property(t => t.RowVersion)
                .IsRequired()
                .IsFixedLength()
                .HasMaxLength(8)
                .IsRowVersion(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    

    楽観的同時実行パターンに関するドキュメント



    1. PostgreSQLの日付と時刻の関数

    2. ゼロ/0の結果をCOUNT集計に含める方法は?

    3. テーブル内で最大のIDを持つ行全体を選択するにはどうすればよいですか?

    4. 存在する場合はUPDATE、それ以外の場合はSQLでINSERT