Subsonic2.2 Shareddbconnectionctionctioncope ومعاملات المعاملات
-
19-09-2019 - |
سؤال
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. آمل أن يساعد هذا...