Castle Monorail Ardatabind يحاول ربط صف غير موجود
-
21-09-2019 - |
سؤال
لديّ تطبيق عربة تسوق يعمل على Monorail واستخدام Castle ActivereCord/Nhibernate ، وهناك طاولة للتسوق وطاولة التسوق ، والتي يتم تعيينها إلى الكيانات.
إليك السيناريو: يضيف المستخدم أشياء إلى عربة التسوق ، وقل 5 عناصر ، ويذهب لعرض العربة. تُظهر العربة جميع العناصر الخمسة. يقوم المستخدم بتكرار علامة التبويب/النافذة ويحصل على علامة تبويب أخرى لنفس العربة (استدعاؤها علامة التبويب B). يقوم المستخدم بإزالة عنصر من العربة ، لذلك يوجد الآن 4 عناصر في Tab B ، ولكن في علامة التبويب الأصلية A ، لا يزال هناك 5 عناصر. يعود المستخدم إلى علامة التبويب "أ" ، ويقوم بتحديث شيء ما في العربة وينقر على زر "التحديث" الذي يقدم التغييرات. يحاول إجراء Monorail الخاص بي القيام بـ ArdataBind على التسوق باستخدام البيانات من العرض ، والذي يتضمن جميع العناصر الخمسة. عندما يصل إلى العنصر الذي حذفه المستخدم من Tab B ، فإنه يلقي "لا يوجد صف مع معرف معين" لهذا العنصر.
لا يمكنني معرفة ما إذا كانت هناك طريقة لعدم ربط هذا الصف ، أو إرجاع NULL ، وإرجاع مثيل جديد ، وما إلى ذلك؟ هناك معلمة autoloadbehavior على سمة Ardatabind ، ولكن يبدو أنها تؤثر فقط على تحميل كيانات الأطفال ، وليس كيان الجذر. بغض النظر عن الخيار الذي أختاره ، أحصل على استثناء قبل التحكم حتى في إدخال طريقة الإجراء (باستثناء AutoloadBehavior.now ، لكن هذا لا يساعدني حقًا).
بدلاً من ذلك ، لدي رمز يستدعي request.obtainparamsnode () لسحب العقد النموذجية وتحليلها يدويًا في كائنات ، ويتجاهل تلك التي لم تعد موجودة. هل هناك طريقة أفضل؟
شكرًا.
المحلول
يرث Ardatabinder, ، تجاوز FindByPrimaryKey(Type targetType, object id)
:
protected override object FindByPrimaryKey(Type targetType, object id) {
return FindByPrimaryKey(targetType, id, false);
}
المفتاح هنا هو خاطئة المعلمة ، مما يجعله يعود فارغة بدلا من الرمي.
ثم يرث Ardatabindattribute, ، تجاوز طريقة CreateBinder () وجعلها تعيد الموثق الجديد بدلاً من Ardatabinder الافتراضي.
ثم قم بتطبيق سمة الموثق المخصصة بدلاً من Ardatabindattribute.