سؤال

أريد خريطة نموذج الكائن الخاص بي إلى nhibernate. هناك جزء صعب واحد في مفهومي ولا أعرف ما إذا كان من الممكن القيام بذلك في Nhibernate.

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

public class Component
{
    public Component Parent { get; set; }
    public IList<Component> SubComponents { get; set; }
    public ComponentGroup Group { get; set; }
}

public class ComponentGroup
{
    public IList<Component> Components { get; set; }
}

الآن أريد أن يعرف كل مكون أي مكونات ينتمي إليه ، لذلك أحتاج إلى مرجع من كل مكون إلى ComponentGroup (خاصية المجموعة). لكن يجب أن تحتوي ComponentGroup على مجموعة فقط من العقد الجذرية (الأطفال المباشرون) - جمع المكونات. لذلك هذا شيء مثل رسم الخرائط الواحد إلى النصف ؛) على جانب واحد "لا يشير إلا إلى بعض العناصر من جانب" كثير ".

هل لديك أي أفكار كيفية تعيين شيء مثل هذا باستخدام nhibernate؟

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

المحلول

سأعطيها لقطة (تم إنشاؤها مع Fluentnhibernate)

<class name="Component" table="`Component`" xmlns="urn:nhibernate-mapping-2.2">
<id name="ComponentId" type="Int32" column="ComponentId">
  <generator class="identity" />
</id>
<many-to-one name="Parent" column="ParentId" />
<bag name="SubComponents">
  <key column="ComponentId" />
  <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Group" column="GroupId" />

<class name="ComponentGroup" table="`ComponentGroup`" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Int32" column="ComponentGroupId">
  <generator class="identity" />
</id>
<bag name="Components">
  <key column="ComponentGroupId" />
  <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>

تعديل:

إذا كنت تريد أن تعرف جميع مكوناتك مجموعة مكوناتها ، فقم بتعيينها جميعًا على مجموعة المكونات.

وفي ComponentGroup إذا كنت تريد جميع مكونات الجذر فقط ، فقم بتغيير الحقيبة إلى:

<bag name="Components" where="ParentId is null"> 

لذلك تحصل فقط على مكونات الجذر

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