У меня есть родительский объект, который имеет связь "один ко многим" с 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 отношения на отображении дочернего объекта?
В нашем примере у нас есть категории с большим количеством продуктов, где продукт не может быть обнулен.
Вы можете обойти эту проблему, удалив продукт и удалив его из родительской коллекции перед флешем, но мы все еще ищем лучшее решение для этого.
product = pRepo.GetByID(newProduct.ProductID);
product.Category.Products.Remove(product);
pRepo.Delete(product);
Надеюсь, это поможет в любом случае
Согласно ответу Чака, я решил свою проблему, добавив инверсию = true в отображении родительской стороны:
Сообщение имеет много MessageSentTo:
[HasMany(typeof(MessageSentTo), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = true)]
public IList<MessageSentTo> MessageSendTos
{
get { return m_MessageSendTo; }
set { m_MessageSendTo = value; }
}
Я использую Castle ActiveRecord. Спасибо, Чак.