nHibernate хранилище объекта с саморегулированием многих детей и многих родителей

У меня есть объект MyItem, который ссылается на дочерние элементы в том же элементе. Как мне настроить файл сопоставления nhibernate для хранения этого элемента?

public class MyItem
{
    public virtual string Id {get;set;}
    public virtual string Name {get;set;}
    public virtual string Version {get;set;}
    public virtual IList<MyItem> Children {get;set;}    
}

Примерно hbm.xml будет выглядеть так:

<class name="MyItem"  table="tb_myitem">
  <id name="Id" column="id" type="String" length="32">
     <generator class="uuid.hex" />
  </id>
  <property name="Name"     column="name" />
  <property name="Version"  column="version" />
  <bag name="Children" cascade="all-delete-orphan" lazy="false">
     <key column="children_id" />
     <one-to-many class="MyItem" not-found="ignore"/>
  </bag>      
</class>

Думаю, это не сработает. Возможно, мне нужно создать другой класс, скажем MyItemChildren, и использовать его в качестве члена Children, а затем выполнить сопоставление в этом классе?

Это означало бы наличие двух таблиц. В одной таблице содержится MyItem, а в другой - ссылки на мой элемент. ПРИМЕЧАНИЕ. У дочернего элемента может быть много родителей.


person Community    schedule 09.06.2010    source источник


Ответы (1)


У меня это работает с нетерпеливой загрузкой объектов.

Я могу загрузить объект MyItem и вместе с ним дочерние (зависимые) объекты MyItem.

Ниже приведен мой класс C #.

using Iesi.Collections.Generic;

namespace Sample
   {
   public class MyItem
      {
      public virtual string Id { get; set; }
      public virtual string Name { get; set; }
      public virtual string Version { get; set; }

      public virtual ISet<MyItem> Dependants { get; set; }

      }
   }

Зависимые лица - это совокупность дочерних элементов, которые зависят от родителя. У каждого MyItem будет много дочерних элементов MyItem. Они хранятся в IESI ISet ‹>.

Файл сопоставления гибернации:

   <class name="Sample.MyItem, Sample" table="myitem">
      <id name="Id" column="id" type="String" length="32">
         <generator class="uuid.hex" />
      </id>

      <property name="Name"     column="name"     type="String" length="80"/>
      <property name="Version"  column="version"  type="String" length="25"/>

      <set name="Dependants" table="myitemhierarchy" >
         <key column="parentid" />
         <many-to-many class="Sample.MyItem, Sample" column="childid" />
      </set>
   </class>

Эта статья очень помогла: http://web.archive.org/web/20090806071731/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/05/14/how-to-map-a-tree-in-nhibernate.aspx

person Community    schedule 10.06.2010