Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

आशावादी संगामिति:IsConcurrencyToken और RowVersion

EF6 और EF-core दोनों में, Sql सर्वर के साथ काम करते समय, आपको इस मैपिंग का उपयोग करना होगा:

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

IsConcurrencyToken किसी संपत्ति को समवर्ती टोकन के रूप में कॉन्फ़िगर करता है, लेकिन (इसे byte[] . के लिए उपयोग करते समय) संपत्ति)

  • डेटा प्रकार varbinary(max) है
  • इसका मान हमेशा null होता है अगर आप इसे इनिशियलाइज़ नहीं करते हैं
  • रिकॉर्ड अपडेट होने पर इसका मान अपने आप नहीं बढ़ता है।

IsRowVersion दूसरी ओर,

  • डेटाटाइप है rowversion (एसक्यूएल सर्वर में, या timestamp पुराने संस्करणों में), इसलिए
  • इसका मान कभी भी शून्य नहीं होता, और
  • रिकॉर्ड अपडेट होने पर इसका मान हमेशा अपने आप बढ़ जाता है।
  • और यह स्वचालित रूप से संपत्ति को एक आशावादी समवर्ती टोकन के रूप में कॉन्फ़िगर करता है।

अब जब आप एक Car को अपडेट करते हैं आपको दो अपडेट स्टेटमेंट दिखाई देंगे:

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 ...

पहला स्टेटमेंट कुछ भी अपडेट नहीं करता है, लेकिन यह रोववर्सन को बढ़ाता है, और अगर बीच-बीच में रोववर्सन को बदल दिया गया तो यह एक समवर्ती अपवाद को फेंक देगा।

[System.ComponentModel.DataAnnotations.Schema.Timestamp] विशेषता 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. SQL सर्वर में लॉगिन के रूप में सक्रिय निर्देशिका उपयोगकर्ता समूह कैसे जोड़ें

  2. एसक्यूएल सर्वर (टी-एसक्यूएल) में मुद्रा के रूप में संख्याओं को कैसे प्रारूपित करें

  3. SQL सर्वर में LIMIT 10..20

  4. मैं PHP के साथ काम करने के लिए SQLSRV एक्सटेंशन कैसे प्राप्त करूं, क्योंकि MSSQL पदावनत है?

  5. SQL सर्वर 2017 में एक तालिका बनाएँ