سؤال

جهات

لدينا كيان يسمى المنتج الذي يتم تحميله باستخدام nhibernate.

المنتج لديه فئة التي يملأني بسعادة.

قاعدة البيانات

في قاعدة البيانات ، يحتوي المنتج على مفتاح خارجي للفئة.

سيناريو

يقوم المستخدم بتحرير هذا المنتج (عبر واجهة ويب) ويختار فئة مختلفة (قل بدلاً من "Fish" نختار "Veg").

ربما تكون هذه قائمة منسدلة ، مع عرض كل فئة. عندما يختارون فئة مختلفة ، نحصل على مفتاح int.

مشكلة

من الواضح أننا نريد الآن حفظ التغييرات في المنتج ولكن في الواقع التغيير الوحيد هو توفير int جديد (على سبيل المثال 2 ، بدلاً من 1).

لذلك نحن نسترجع المنتج الحالي ، ونأتي الآن المشكلة.

ليس لدينا حقل "فئة" على المنتج ، ولدينا فقط خاصية فئة.

لكننا لا نريد حقًا استرداد الفئة (حسب المعرف) فقط لتعيينه للمنتج.

لذلك أعتقد أن ما أريد معرفته هو هل يجب علينا ...

أ) إضافة خاصية فئة إلى المنتج

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

ج) استرداد (البحث) الفئة من النظام (حسب المعرف) وإرفاق ذلك بالمنتج

د) افعل شيئًا آخر تمامًا!

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

المحلول

تحديث: Session.load هو اجابة صحيحة

product.Category = session.Load<Category>(2);

session.Save(product);

نصائح أخرى

يبدو أنك قد تكون قادرًا على استخدام وظيفة Session.Load (id).

Session.load هي طريقة خاصة تُرجع وكيلًا باستخدام المعرف حتى تطلب خاصية أخرى عند تحميلها. يلقي خطأ إذا لم يكن هناك عنصر يطابق المعرف. جرب شيئًا مثل:

product.Category = Session.Load<Category>(2); //2 being the new category ID

Session.SaveOrUpdate(product);

لقد أجريت اختبارات صغيرة ولا يبدو أنها تراجع الفئة بأكملها.

استخدم NH's EnumStringType<T> لرسم خريطة فئتك كعنصر لقيمة قاعدة البيانات ذات الصلة (والتي يمكن أن تكون سلسلة أو رقم). ستجد عددًا قليلاً من أمثلة الاستخدام ، إذا كنت Google لذلك.

هول!

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