हमें लेनदेनस्कोप का उपयोग करने में समस्या है। लेनदेन स्कोप हमारे डेटा एक्सेस लेयर में लेनदेन का उपयोग करने के लिए हमें बहुत अच्छी लचीलापन प्राप्त करता है। इस तरह हम लेनदेन को स्पष्ट या स्पष्ट उपयोग कर सकते हैं। एडीओ.NET लेनदेन को फिर से कुछ प्रदर्शन बढ़ावा मिला है, लेकिन इस समय यह वास्तव में समस्या नहीं है। हालांकि हमें लॉकिंग में समस्या है। उदाहरण के लिए नीचे कोड, हालांकि अलगाव स्तर को पढ़ा गया है, हालांकि तालिका परीक्षण पर अन्य क्लाइंट से एसक्यूएल कथन का चयन करना संभव नहीं है, जब तक मुख्य लेनदेन (मुख्य विधि में) नहीं किया जाएगा, क्योंकि पूरे टेबल पर लॉक है। हमने सभी विधियों में केवल एक कनेक्शन का उपयोग करने की कोशिश की, लेकिन एक ही व्यवहार। हमारा डीबीएमएस एसक्यूएल सर्वर 2008 है। क्या ऐसा कुछ है जिसे हम समझ में नहीं आया?लेनदेनस्कोप और अलगाव स्तर
class Program
{
public class DAL
{
private const string _connectionString = @"Data Source=localhost\fsdf;Initial Catalog=fasdfsa;Integrated Security=SSPI;";
private const string inserttStr = @"INSERT INTO dbo.testTable (test) VALUES(@test);";
/// <summary>
/// Execute command on DBMS.
/// </summary>
/// <param name="command">Command to execute.</param>
private void ExecuteNonQuery(IDbCommand command)
{
if (command == null)
throw new ArgumentNullException("Parameter 'command' can't be null!");
using (IDbConnection connection = new SqlConnection(_connectionString))
{
command.Connection = connection;
connection.Open();
command.ExecuteNonQuery();
}
}
public void FirstMethod()
{
IDbCommand command = new SqlCommand(inserttStr);
command.Parameters.Add(new SqlParameter("@test", "Hello1"));
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Required))
{
ExecuteNonQuery(command);
sc.Complete();
}
}
public void SecondMethod()
{
IDbCommand command = new SqlCommand(inserttStr);
command.Parameters.Add(new SqlParameter("@test", "Hello2"));
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Required))
{
ExecuteNonQuery(command);
sc.Complete();
}
}
}
static void Main(string[] args)
{
DAL dal = new DAL();
TransactionOptions tso = new TransactionOptions();
tso.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Required,tso))
{
dal.FirstMethod();
dal.SecondMethod();
sc.Complete();
}
}
}
आपके संकेत के लिए धन्यवाद। तो अगर इसे सही समझा जाता है, तो ट्रांज़ेक्शनस्कोप पर लेनदेन अलगाव स्तर की सेटिंग्स केवल इस लेनदेन के दायरे से डीबीएमएस पर पढ़ने के ऑपरेशन द्वारा डेटा तक पहुंचने में सक्षम होगी। –