Мне нужна помощь, чтобы понять, как действовать. Я создаю приложение для управления коллекцией записей, и у меня есть следующие сопоставления.
<class name="Soulful.Core.Domain.Model.Record,Soulful.Core" table="Record">
<id name="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<many-to-one name="Artist" class="Soulful.Core.Domain.Model.Artist,Soulful.Core" foreign-key="FK_Artist_Id" cascade="all">
<column name="ArtistId" not-null="true" />
</many-to-one>
.... more properties
</class>
<class name="Soulful.Core.Domain.Model.Artist,Soulful.Core" table="Artist">
<id name="Id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Name" type="string" not-null="true" />
</class>
Я хочу, чтобы многие записи были привязаны к одному исполнителю, и это прекрасно работает. Но у меня возникают проблемы, когда я пытаюсь удалить запись. То, что я хотел бы сделать, это:
Удалить запись и исполнителя, если к этому исполнителю не подключены никакие другие записи. Если к исполнителю подключены записи, просто удалите запись.
При текущем отображении я получаю следующую ошибку при вызове сеанса. Удаление (запись);:
NHibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)[Soulful.Core.Domain.Model.Artist#3]
Вот как выглядит мой DeleteMethod:
public virtual void Delete(T entity)
{
using (var session = GetSession())
using (var transaction = session.BeginTransaction())
{
try
{
session.Delete(entity);
transaction.Commit();
}
catch (HibernateException)
{
transaction.Rollback();
throw;
}
}
}
Что мне нужно сделать, чтобы это работало так, как я хочу?
Пожалуйста, не стесняйтесь излагать очевидное.
Обновление
Наверное, я спрашиваю, нужно ли мне вручную обрабатывать удаление художников?