ماذا تفعل عندما لا يتم دعم المعاملات أو المعاملات المتداخلة؟

StackOverflow https://stackoverflow.com/questions/3851963

سؤال

TransactionsCope هي ميزة رائعة ولكن عدد قليل جدًا من مقدمي الخدمات يقومون بتنفيذه بشكل صحيح. لا أريد تمرير الاتصال كمعلمة.

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

المحلول

لست متأكدًا مما أردت تحقيقه باستخدام TransactionsCope هنا - إذا كانت الفكرة هي أن يكون لديك تدفق معاملات Auotmatic عبر الطرق (والتجنيد البسيط داخل المعاملة المستمرة) ، فإن تمرير الاتصال كمعلمة ليست هي الطريقة الوحيدة. يمكنك تمرير الاتصال الحالي والمعاملة باستخدام التيار CallContext (أو الموضوع الحالي). ضع غلافًا ثابتًا بسيطًا من شأنه أن يتحقق مما إذا كان الاتصال/المعاملة موجودًا في سياق الاتصال الحالي ويقوم بإنشاء إن لم يكن. هذه طريقة شفافة غير تدخلية بدلاً من المرور بالمعلمة.

الآن ، إذا كنت تبحث في المعاملات المتدفقة عبر حدود مجال التطبيق و/أو استخدام مديري الموارد المتعددين (أي باستخدام المعاملات الموزعة) ، فإن أفضل رهان هو استخدام TransactionsCope وطرحه مواردك الخاصة. بالطبع ، هذا ليس شيئًا تافهًا ، ولكن هذا ما يستلزمه الشرط. إذا كان النظام الأساسي لا يوفر مورد معاملات ، فيمكن لمدير الموارد المخصص استخدام معاملة التعويض عن الحصول على عوائق لفة (على سبيل المثال ، يمكن للمدير الموجود في أعلى نظام الملفات استخدام "Delete Folder" كتعويض معاملة مقابل المعاملة الأصلية لـ "Create Folder") .

نصائح أخرى

ربما كنت تبحث عن انتشار النظام.

في الأساس ، كل معاملة مجلة (يتم حفظ تفاصيل المعاملة) وإذا تعطل التطبيق وإعادة تشغيله ، فيمكنك إما التقاط المكان الذي تركت فيه التغييرات أو تراجعها بناءً على الحالة المجلة.

إليك رابط لـ نمط لقطة يمكن أن تساعدك في تنفيذ انتشار النظام.

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