nhibernate كثيرة إلى واحد / واحد إلى واحد مع مفاتيح مختلفة

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

سؤال

مرحبًا ، أنا أركل الإطارات على nhibernate ولدي conoundrum ، لقد خدش رأسي قليلاً الآن ، وأعمل مع قاعدة بيانات قديمة مع بعض العلاقات المعقدة إلى حد ما.

PrintRoot لديه مفتاح أساسي للمطالبة. لدى PrintRoot حقيبة من المطالبات المرتبطة من قبل المطالبة (هذا يعمل علاج).

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

لقد نشرت رسم خرائط أدناه مع إزالة أعمدة إضافية لحماية الأبرياء.

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    <id name="ClaimGUID">
      <generator class="guid"/>      
    </id>
    <property name="FormID" />
    <property name="LastFormNoteText" />
    <bag name="ClaimDetails" inverse="true">
      <key column="ClaimGUID"/>
      <one-to-many class="ClaimDetails"/>
    </bag>
  </class>

  <class name="ClaimDetails" table="tbl_ClaimDetails" schema="DB2.dbo">
    <id name="RowID">
      <generator class="native"/>
    </id>
    <property name="ClaimGUID" />
    <property name="SeqNo"/>
    <property name="B1A_InsID" />
    <many-to-one name="Root" column="ClaimGUID" foreign-key="ClaimGUID"/>
  </class>


  <class name="ClaimFinancials" table="tbl_ClaimFinancials" schema="DB1.dbo">
    <id name="FormID">
      <generator class="native"/>
    </id>
    <property name="CreatedDate"/>
    <property name="SubmittedDate" />
  </class>

شكرا لك مقدما! -بوب

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

المحلول

على افتراض أن FormId يستخدم فقط لربط Prayroot و PlayFinancials ، يبدو أنك تريد علاقة كثيرة من PlayRoot إلى المطالبة. استبدل الخاصية الصالحة على PrintRoot بالعديد من إلى واحد.

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    ...
    <many-to-one name="ClaimFinancials" column="FormID" />
    ...
  </class>

يمكن استخدام علاقة كثيرة حتى لو كان هناك "واحد" فقط على الجانب "العدد". إذا كنت تقوم بإنشاء مخطط ، فيمكنك تحديد unique="true" لإنشاء القيد في قاعدة البيانات. مع قاعدة بيانات قديمة ، لن يكون هذا مهمًا.

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