Mysql
 sql >> Database >  >> RDS >> Mysql

DbUpdateConcurrencyException usando Entity Framework 6 con MySql

Dovresti provare a utilizzare la funzione DB Timestamp / Rowversion. In EF dichiari un ByteArray e lo nomini come campo di controllo della concorrenza. DB imposta il valore alla creazione. Tutti gli aggiornamenti successivi possono verificare che il valore non sia stato modificato. Questo approccio funziona su SQL Server. Dovrebbe comportarsi allo stesso modo su MYSql.

    public  abstract class BaseObject  {
    [Key]
    [Required]
    public virtual int Id { set; get; }

    [ConcurrencyCheck()]
    public virtual byte[] RowVersion { get; set; }

    }

o tramite fluente se ti piace// 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(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Docu sul modello di concorrenza ottimistica