Как удалить дочерний объект в NHibernate?

У меня есть родительский объект, который имеет связь "один ко многим" с IList дочерних объектов. Что лучший способ состоит в том, чтобы удалить дочерние объекты? Я не удаляю родителя. Мой родительский объект содержит IList дочерних объектов. Вот отображение для связи "один ко многим":

<bag name="Tiers" cascade="all">
  <key column="mismatch_id_no" />
  <one-to-many class="TGR_BL.PromoTier,TGR_BL"/>
</bag>

Если я пытаюсь удалить все объекты из набора с помощью ясного (), то назовите SaveOrUpdate (), я получаю это исключение:

System.Data.SqlClient.SqlException: Cannot insert the value NULL into column

Если я пытаюсь удалить дочерние объекты, индивидуально тогда удаляют их из родителя, я получаю исключение:

deleted object would be re-saved by cascade

Это - мой первый раз, имея дело с удалением дочерних объектов в NHibernate. Что я делаю неправильно?

править: Просто для уточнения - я НЕ пытаюсь удалить родительский объект, просто дочерние объекты. Мне настраивали отношения как одно многим на родителе. Я должен также создать many-one отношения на отображении дочернего объекта?

78
задан Mark Struzinski 19 November 2008 в 19:51
поделиться

2 ответа

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

Вы можете обойти эту проблему, удалив продукт и удалив его из родительской коллекции перед флешем, но мы все еще ищем лучшее решение для этого.

product = pRepo.GetByID(newProduct.ProductID);
product.Category.Products.Remove(product);
pRepo.Delete(product);

Надеюсь, это поможет в любом случае

2
ответ дан 24 November 2019 в 10:35
поделиться

Согласно ответу Чака, я решил свою проблему, добавив инверсию = true в отображении родительской стороны:

Сообщение имеет много MessageSentTo:

[HasMany(typeof(MessageSentTo), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = true)]
public IList<MessageSentTo> MessageSendTos
{
    get { return m_MessageSendTo; }
    set { m_MessageSendTo = value; }
}

Я использую Castle ActiveRecord. Спасибо, Чак.

3
ответ дан 24 November 2019 в 10:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: