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

SqlConnection और MSDTC को पदोन्नति से बचना

मैं थोड़ा हैरान हूं कि आप इसे देख रहे हैं, क्योंकि RequiresNew चाहिए इसका मतलब है कि यह अन्य लेनदेन से अलग है; आम तौर पर, इस संदेश का अर्थ है कि लेनदेन के दायरे में 2 कनेक्शन सक्रिय कर दिए गए हैं - क्या आप निश्चित हैं उस ब्लॉक के अंदर कनेक्शन बनाने/खोलने के लिए कोई अन्य कोड नहीं है?

आपका प्रस्तावित समाधान काम करना चाहिए - हालांकि कुछ मायनों में TransactionScopeOption.Suppress आपकी कॉन्फ़िगरेशन बदलने से अधिक सुविधाजनक हो सकता है (लेकिन या तो काम करना चाहिए)। हालांकि, एक समस्या है:ADO.NET लेनदेन को अलग-अलग कमांड में पास किया जाना चाहिए, इसलिए आपको इसकी आवश्यकता होगी (कोड को थोड़ा सा साफ करना):

using(var transaction = conn.BeginTransaction()) {
    try {
        var count = _changeTracker.CommitChanges(conn, transaction);
        transaction.Commit();
        return count;
    } catch {
        transaction.Rollback();
        throw;
    }
}

जहां CommitChanges लेन-देन स्वीकार करता है - शायद वैकल्पिक मापदंडों का उपयोग करके:

int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }

DapperFactory . का आपका नामकरण सुझाव है कि आप "डैपर" का उपयोग कर रहे हैं - इस मामले में, आप इसे "डैपर" में पास कर सकते हैं चाहे वह शून्य हो या नहीं, यानी

conn.Execute(sql, args, transaction: transaction);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WHERE-CASE क्लॉज सबक्वेरी परफॉर्मेंस

  2. जॉइन और इनर जॉइन के बीच अंतर

  3. एसक्यूएल सर्वर में डेटाटाइम कनवर्ट करें

  4. TSQL में नेस्टेड ट्रांजैक्शन थ्रोइंग एरर का रोलबैक

  5. एक बड़ी डील :SQL Server 2016 सर्विस पैक 1