मैं थोड़ा हैरान हूं कि आप इसे देख रहे हैं, क्योंकि 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);