هل هناك طريقة لتحديد خصائص قابلة لإعادة الاستخدام إلى تعيينات N-Hibernate؟

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

سؤال

لدي سيناريو أريد إضافة بعض الخصائص القياسية إلى كياناتي. وهذا يعني أنني سأحصل على مثال على سبيل المثال 1 و 2 خصائص السلسلة المطبقة على جميع الكيانات ذات الصلة. لدي أكثر من 100 ملف من ملفات التعيين ومعظمها ولكن ليس كل شيء سيكون مضيفا لهذه الخصائص الجديدة. في الفصول سهلة تحديد هذا؛ في التعيينات ولكن لم أجد أي إشارة أخرى غير إنشاء أداة مساعدة أو XSLT وتطبيق ذلك (كيفية تحديد قابلة لإعادة الاستخدامu003Cgenerator> عناصر في رسم الخرائط السبات).

ومع ذلك، أريد أن أكون قادرا على إضافة / تعديل / إزالة الخصائص من التعيين "القياسي".

تشك لأي ردود

Edit1: مثال على التعيين الذي أريد إضافته

<property name="TimeOfEdit" column="TimeOfEdit" type="DateTime" not-null="true"/>
<many-to-one name="EditedBy" column="FK_EditedBy" cascade="save-update" not-null="true" />

Edit2: قمت بإزالة الحل المقبول لأنه مع كيانات NH 2.1.1 XML لا يعمل (NH-1236) وسيقوم NH برمي "DTD محظور في مستند XML هذا"

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

المحلول 5

يبدو أن هذا فقط للقيام بذلك، هو استخدام تعيين ديناميكي (http://ayende.com/blog/archive/2008/01/dynamic-mapprernate.aspx.)

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

Configuration cfg = new Configuration() Mappings mappings = cfg.CreateMappings(); 
foreach (var persistentClass in mappings.Classes) 
{ 
   if (persistentClass.MappedClass is IAuditable)
   {
     ...
   }
}

وثم

cfg.BuildSessionFactory();

أن يكون ذلك سلكي وعلى استعداد لاستخدامه لمدة 85 فصول، فإن تأثير الأداء ضئيل

نصائح أخرى

ذلك يعتمد على كيفية تنفيذ هذه الخصائص في فصولك.

إذا كانت جميعها محددة في الطبقة الأساسية أو واجهة, ، يمكنك تعيينها مرة واحدة في الفئة الأساسية أو الواجهة، واستمتلاك باستخدام union-subclass. وبعد هناك بعض القيود. اقرأ هذا الفصل في الوثائق lhibernate حوله.

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

هناك خيار آخر: يمكنك استخدام كيانات XML. وبعد هذه ميزة بدائية إلى حد ما من XML والتي يدعمها Nibernate. اقرأ هذا الفصل في الوثائق المرجعية NH حيث يتم ذكرها.

إنشاء مولد رمز خاص لحالتك المحددة هو خيارك الوحيد.

الخيار 1:
-Define هذه الخصائص 3 في فئة أساسية

- كياناتك ترث من هذه القاعدة

- مجموعة "جدول التسلسل الهرمي للفئة"

الخيار 2:

- تحديد هذه الخصائص 3 كمكون.

، يمكنك الحصول على تعيين لهذه الخصائص 3 في ملف واحد تم إعادة استخدامه.

قد نلقي نظرة على fluentnibernate., ، سوف تبسط عمل رسم الخرائط بالنسبة لك. مع تعيين تلقائي، قد تحتاج فقط إلى فئة قاعدة مجردة لتحديد هذه الخصائص.

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