NHibernate: ошибка удаления - PullRequest
       7

NHibernate: ошибка удаления

0 голосов
/ 27 апреля 2010

Модель: У меня есть модель, в которой одна установка может содержать несколько «компьютерных систем».

База данных: Таблица Установки имеет два столбца Имя и Описание. Таблица ComputerSystems имеет три столбца: имя, описание и идентификатор установки.

Отображения:

У меня есть следующее сопоставление для установки:

<?xml version="1.0" encoding="utf-8"?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="myProgram.Core" namespace="myProgram">

  <class name="Installation" table="Installations" lazy="true">

    <id name="Id" column="Id" type="int">
      <generator class="native" />
    </id>

    <property name="Name" column="Name" type="string" not-null="true" />
    <property name="Description" column="Description" type="string" />


    <bag name="ComputerSystems" inverse="true" lazy="true" cascade="all-delete-orphan">
      <key column="InstallationId" />
      <one-to-many class="ComputerSystem" />
    </bag>

  </class>

</hibernate-mapping>

У меня есть следующее сопоставление для ComputerSystem:

<?xml version="1.0" encoding="utf-8"?>

<id name="Id" column="ID" type="int">
  <generator class="native" />
</id>

<property name="Name" column="Name" type="string" not-null="true" />
<property name="Description" column="Description" type="string" />

<many-to-one name="Installation" column="InstallationID" cascade="save-update" not-null="true" />

Классы:

Класс установки:

public class Installation 
{

    public virtual String Description { get; set; }
    public virtual String Name { get; set; } 


    public virtual IList<ComputerSystem> ComputerSystems
    { 
        get
        {
            if (_computerSystemItems== null)
            {
                lock (this)
                {
                    if (_computerSystemItems== null)
                        _computerSystemItems= new List<ComputerSystem>();
                }
            }
            return _computerSystemItems;
        } 
        set
        {
            _computerSystemItems= value; 
        }
    }

    protected IList<ComputerSystem> _computerSystemItems;




    public Installation()
    {
        Description = "";
        Name= "";
    }


    }

Класс ComputerSystem:

открытый класс ComputerSystem { public virtual String Name {get; задавать; } public virtual String Описание {get; задавать; } публичная виртуальная установка Installation {get; задавать; }

}

Проблема в том, что я получаю сообщение об ошибке при попытке удалить установку, содержащую компьютерную систему. Ошибка: «удаленный объект будет повторно сохранен каскадом (удалить удаленный объект из ассоциаций)». Кто-нибудь может помочь?

С уважением, Себ

1 Ответ

0 голосов
/ 27 апреля 2010

Я думаю, что это вызвано cascade = "save-update" в файле отображения для ComputerSystem. Если вам не нужно каскадно двигаться в этом направлении (от ребенка к родителю), вы можете удалить его.

В качестве альтернативы вы можете попробовать очистить список ComputerSystems объекта установки перед удалением установки.

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