nHibernate хранения объекта с самообращением многих детей и многих родителей - PullRequest
0 голосов
/ 09 июня 2010

У меня есть объект 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, а другая таблица содержит ссылки из моего элемента. ПРИМЕЧАНИЕ: у ребенка может быть много родителей.

1 Ответ

0 голосов
/ 10 июня 2010

Я работаю с активной загрузкой объектов.

Я могу загрузить объект 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...