سؤال

أبحث عن حل لمشكلة التصميم.هذا سوف يستغرق قليلا من الشرح.أود أن أنشر الرمز، لكن هذا سيجعل هذا أطول.

لدي مجموعة عامة مخصصة أستخدمها للاحتفاظ بكائنات الأعمال حسب الحاجة.لسهولة الرجوع إليها، قم باستدعاء كائنات الأعمال بو والجمع العام جي سي.لدي داخل GC مجموعة خاصة من كائنات الأعمال التي تم وضع علامة عليها للحذف.استدعاء هذه المجموعة الخاصة بي دي سي.

يمكنني الحصول على عدد عشوائي من GC، كل منها لديه PDC خاص به، في أي وقت، بالإضافة إلى BOs الأخرى التي ليست في أي مجموعة.

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

عندما يحفظ GC لدي مشكلة في حالة PDC الخاص به.يقوم GC أولاً بحفظ كافة كائنات BO مع التحديثات، ثم يحذف السجلات المرتبطة بكائنات BO في PDC، ثم مسح PDC لجميع الكائنات BOs.أفعل هذا حتى تعكس حالة GC بشكل صحيح الحالة الجديدة لقاعدة البيانات.

لنفترض الآن فشل حفظ BO أو GC بعد حفظ واحد أو أكثر من GC بنجاح.ينفذ TransactionScope التراجع.تتم استعادة السجلات المحذوفة من قاعدة البيانات، ولكن تم مسح بعض/كل وحدات PDC وفقدت معلومات الحالة تلك.

إذن هنا معضلة بلدي:كيف يمكنني الاحتفاظ بمعلومات PDC حتى بعد حدوث الالتزام، ثم ضمان مسح المجموعات المناسبة؟

ليس لدى TransactionScope أي حدث يمكنني التقاطه لإعلامي بموعد تنفيذ التغييرات.من المحتمل أن يتأثر العديد من BOs وGC بأي معاملة معينة، لذلك لا يمكنني تقييد المعاملة للتعامل مع GC واحد في كل مرة.

أي اقتراحات؟

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

المحلول

يتم رفع TransactionStarted بواسطة مدير المعاملة، ويتم رفع TransactionCompleted بواسطة المعاملة نفسها.

قد ترغب في تنفيذ GC IEnlistmentNotification;هناك مثال قد يساعدك.

قد ترغب أيضًا في التحقق برنامج DNR التلفزيوني 113 و 114.

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