Отображение экземпляра IList в NHibernate - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь отобразить отношения родитель-потомок, используя NHibernate (2.1.2), MySql.Data (6.2.2) и MySQL Server (5.1). Я понял, что это должно быть сделано с помощью <bag> в файле сопоставления. Я создаю тестовое приложение, которое работает без каких-либо ошибок и выполняет insert для каждой записи, но каким-то образом внешний ключ внутри дочерней таблицы (ParentId) всегда пуст (ноль).

Вот важные части моего кода ...

Родитель

public class Parent
{
    public virtual int Id { get; set; }
    public virtual IList<Child> Children { get; set; }
}


<class name="Parent">
  <id name="Id">
    <generator class="native"/>
  </id>        
  <bag name="Children" cascade="all">
    <key column="ParentId"/>
    <one-to-many class="Child"/>
  </bag>    
</class>

Дети

public class Child
{
    public virtual int Id { get; set; }
}

<class name="Child">
  <id name="Id">
    <generator class="native"/>
  </id>    
</class>

Программа

using (ISession session = sessionFactory.OpenSession())
{                                
     session.Save(
        new Parent() 
        {
            Children = new List<Child>() 
            { 
                new Child(), 
                new Child() 
            } 
        });
}

Есть идеи, что я сделал не так?

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Вы должны обернуть все свои данные доступа в транзакции. Это будет работать:

using (ISession session = sessionFactory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{                                
     session.Save(
        new Parent() 
        {
            Children = new List<Child>() 
            { 
                new Child(), 
                new Child() 
            } 
        });
     tx.Commit();
}

Фактически вставки выполняются только потому, что вы используете генератор native; с клиентским генератором они даже не будут отправлены в БД.

0 голосов
/ 06 апреля 2010
<class name="Child">
  <id name="Id">
    <generator class="native"/>
  </id>    
  <many-to-one name="Parent" column="ParentID"/>
</class>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...