سؤال

Argh !!!

يبدو أن هناك من الارتباك القليل المحيط بالأشياء CHAREDDBCONNCACTICTICTCOPECPOPECECTION لتمكين التفاف استفساراتك البنائية في المعاملة.

تقوم المستندات بتوجيه تحديد استخدام SharedDBConnectionctioncopecope

using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
  using(TransactionScope ts = new TransactionScope())
  {
    // do something
    ts.Complete();
  }
}

ثم سؤال آخر هنا مثل الخلق: باستخدام SharedDBConnectionctionctioncope مع معاملات المعاملات يبدو أنه مكسور أقترح أن المستندات خاطئة ويجب أن تكون الكائنتين هي العكس

using(TransactionScope ts = new TransactionScope())
{
  using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
  {
    // do something
    ts.Complete();
  }
}

ولكن بالنظر إلى شفرة المصدر أنا أكثر حيرة.

في ملف رمز SQLQuery.cs يحتوي على عدد من البرامج الزائدة من التطوير التنفيذي. علي سبيل المثال...

public static void ExecuteTransaction(List<SqlQuery> queries)
{
  using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
  {
    using(TransactionScope ts = new TransactionScope())
    {
      foreach(SqlQuery q in queries)
        q.Execute();
    }
  }
}

UMM ... مثيرة للاهتمام ... يطابق المستندات ولكن ... أين دعوة ts.complete ()؟

كيف يفترض أن يرتكب المعاملة؟ بقدر ما أستطيع أن أرى أنه ستراجع دائما. وهو نفسه بالنسبة لجميع الحملات المنفذة المنفذة!

ولكن هنا هو كيكر الحقيقي ...

في TransactionWithDTTTCFFTSTS.CS يحتوي رمز بعض الاختبارات اللطيفة باستثناء أنها أنشأت SharedDBConnectionctionctionCopcope والمعاملات حول الاتجاه الآخر!

using(TransactionScope ts = new TransactionScope())
{
  using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
  {
    // <snip />
  }
}

لم تتح لي الفرصة لتشغيل الاختبارات الخاصة بالفرطية 2.2 لكنني أفترض أن شخصا ما قد مرت ..

أخيرا...

هل يمكن لشخص ما أن يعطيني الإجابة النهائية على كيفية إعداد المعاملات في Subsication2.2؟ هل المستندات خطأ بالفعل؟ هل يتم محاذاة مصدر الزائدة على التنفيذ التنفيذي والاختبارات إلى أي طريقة صحيحة بالفعل؟

هل كانت مفيدة؟

المحلول

يجب أن يكون كتلة SharedConnectioncopeCopecope (SCS) داخل المعاملات (TS). الغرض من SCS هو منع تصعيد المعاملة إلى MSDTC إذا كان ذلك ممكنا، لذا فإن تناول TS باستخدام كتلة داخل SCS باستخدام Block يجعلني معنى قليل بالنسبة لي. على أي حال، يجب أن يكون لكل كتلة TS مكالمة كاملة () للتعامل مع المعاملة.

نصائح أخرى

شخصيا وجدت أنه عند استخدام SQL 2005، يجب أن يكون SCS داخل TS وعند استخدام SQL 2000 (مع MSDTC)، يجب أن تلتف SCS TS. آمل أن يساعد هذا...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top