إدارة العمليات بإستخدام الـ TransactionScope

26 فبراير 2017     367 مشاهدة    0 تعليق
تم النشر في #Transaction  # ADO.NET 

الـ Transaction ماهي إلا عباره عن وحده من العمليات, والتي تتكون من مجموعة من المهام التي لابد أن تنفذ كوحده واحده, وفي حال فشل أي مهمه تحبط العملية بالكامل. طبعاً هذا يضمن تكامل البيانات وتناسقها.

سنستعرض اليوم كيفية إستخدام مفهوم الـ Transaction في الدوت نت. وفرت لنا بيئة الدوت نت الفئة TransactionScope والذي نستطيع من خلاله من عمل نطاق لمجموعة من العمليات المرتبط والمراد تنفيذها كوحده واحده.

لنفترض ان لدينا حسابين والمراد تحويل مبلغ 120 من الحساب رقم 911476 إلى الحساب رقم 351272, فلو تمعنا قليلاً في العمليتين السابقتين فهما يمثلان عملية تحويل من حساب إلى آخر, أي نقوم بخصم المبلغ من الحساب الأول ومن ثم إيداعه في الحساب الثاني. فلابد أن تتم كلتا العمليتين أو لا تتم.

دعونا الآن نحكاي السيناريو السابق بإستخدام السي الشارب

using (var scope = new TransactionScope())
{
  using (var conn1 = new SqlConnection("ConnectionString"))
  {
    conn1.Open();
    using (var cmd = new SqlCommand("Update Accounts Set Balance = Balance - 120 Where Id=911476", conn1))
    {
      cmd.ExecuteNonQuery();
    }
    using (var cmd = new SqlConnection("ConnectionString"))
    {
      conn2.Open();
      using (var cmd = new SqlCommand("Update Accounts Set Balance = Balance + 120 Where Id=351272", conn2))
      {
        cmd.ExecuteNonQuery();
      }
    }
  }
  scope.Complete();
}

فجميع مطوري قواعد البيانات الذين تعاملوا مع الـ ADO.NET ليس بغريب عليهم الفئات السابقة SqlConnection, SqlCommand والجديد ماهو إلا عملية وضع العمليات المراد تنفيذها كوحده واحده ضمن نطاق الـ TransactionScope فلو تمت كلتا العمليتين نقوم بإستخدام الإجراء Complete() وإلا فإان العملية يتم إحباطها.

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك