У меня есть родительский объект, который имеет отношение «один ко многим» с IList дочерних объектов. Как лучше всего удалить дочерние объекты? Я не удаляю родителя. Мой родительский объект содержит список дочерних объектов. Вот отображение отношения "один ко многим":
<bag name="Tiers" cascade="all">
<key column="mismatch_id_no" />
<one-to-many class="TGR_BL.PromoTier,TGR_BL"/>
</bag>
Если я попытаюсь удалить все объекты из коллекции с помощью clear (), а затем вызову SaveOrUpdate (), я получу следующее исключение:
System.Data.SqlClient.SqlException: Cannot insert the value NULL into column
Если я попытаюсь удалить дочерние объекты по отдельности, а затем удалить их из родительского, я получу исключение:
deleted object would be re-saved by cascade
Я впервые занимаюсь удалением дочерних объектов в NHibernate. Что я делаю неправильно?
edit: Просто чтобы уточнить - я НЕ пытаюсь удалить родительский объект, а только дочерние объекты. Я установил отношения один-ко-многим с родителем. Нужно ли мне также создавать отношения «многие к одному» в сопоставлении дочерних объектов?
источник
Согласно ответу Чака, я решил свою проблему, добавив Inverse = true в отображение родительской стороны:
В сообщении много MessageSentTo:
[HasMany(typeof(MessageSentTo), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = true)] public IList<MessageSentTo> MessageSendTos { get { return m_MessageSendTo; } set { m_MessageSendTo = value; } }
Я использую Castle ActiveRecord. Спасибо, Чак.
источник
Попробуйте использовать merge () вместо saveOrUpdate (). Кроме того, убедитесь, что ваш каскад установлен на all-delete-orphan и что ваши родительско-дочерние отношения обратимы (inverse = true для родителя, а затем поле в дочернем элементе, которое является родительским идентификатором с not-null = true) .
источник
В нашем примере у нас есть категории со многими продуктами, в которых продукт не допускает значения NULL.
Вы можете обойти проблему, удалив продукт и удалив его из родительской коллекции перед сбросом, но мы все еще ищем лучшее решение для этого.
Надеюсь, это все равно поможет
источник
Измените значение атрибута каскада с «all» на «all-delete-orphan».
источник
установите Not-Null = true в сопоставлении столбца, вызывающего проблему. Я не уверен в точном синтаксисе (извините).
источник