Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konkurensi optimis:IsConcurrencyToken dan RowVersion

Baik di EF6 dan EF-core, saat bekerja dengan Sql Server, Anda harus menggunakan pemetaan ini:

modelBuilder.Entity<Product>() 
.Property(t => t.RowVersion) 
.IsRowVersion(); // Not: IsConcurrencyToken

IsConcurrencyToken mengonfigurasi properti sebagai token konkurensi, tetapi (saat menggunakannya untuk byte[] properti)

  • tipe datanya adalah varbinary(max)
  • nilainya selalu null jika Anda tidak menginisialisasinya
  • nilainya tidak bertambah secara otomatis saat catatan diperbarui.

IsRowVersion di sisi lain,

  • memiliki tipe data rowversion (di Sql Server, atau timestamp di versi sebelumnya), jadi
  • nilainya tidak pernah nol, dan
  • nilainya selalu bertambah secara otomatis saat catatan diperbarui.
  • dan secara otomatis mengonfigurasi properti menjadi token konkurensi optimis.

Sekarang ketika Anda memperbarui Car Anda akan melihat dua pernyataan pembaruan:

DECLARE @p int
UPDATE [dbo].[Product]
SET @p = 0
WHERE (([Id] = @0) AND ([Rowversion] = @1))
SELECT [Rowversion]
FROM [dbo].[Product]
WHERE @@ROWCOUNT > 0 AND [Id] = @0

UPDATE [dbo].[Car]
SET ...

Pernyataan pertama tidak memperbarui apa pun, tetapi meningkatkan versi baris, dan akan mengeluarkan pengecualian konkurensi jika versi baris diubah di antaranya.

[System.ComponentModel.DataAnnotations.Schema.Timestamp] atribut adalah anotasi data yang setara dengan IsRowVersion() :

[Timestamp]
public byte[] RowVersion { get; set; }


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa Surat Tidak Terkirim di SQL Server (T-SQL)

  2. Menghubungkan ke SQL Server 2012 menggunakan sqlalchemy dan pyodbc

  3. Cara Mengonversi Nilai Tanggal/Waktu menjadi String di SQL Server menggunakan CONVERT()

  4. Gunakan OBJECTPROPERTY() untuk Mengetahui apakah Objek adalah Batasan PERIKSA di SQL Server

  5. 2 Cara Membuat Tabel Jika Tidak Ada di SQL Server