我正在开发一个示例应用程序,以便我可以了解NHibernate的细节。我正在努力解决删除问题。我希望能够通过从父集合中删除子记录然后保存父记录来删除子记录。我已经建立了双向的一对多关系,插入/更新工作得很好。
这是我的映射
篮:
<bag name="Items" inverse="true" cascade="all">
<key column="BasketId" />
<one-to-many class="BasketItem" />
</bag>
BasketItem:
<many-to-one not-null="true" name="Basket" column="BasketId" />
我想拨打basket.RemoveBasketItem(BasketItem item)
然后Session.SaveUpdate(basket)
,以便删除购物篮项目。这可能吗?
答案 0 :(得分:18)
将cascade="all"
更改为cascade="all-delete-orphan"
。
cascade="all"
将仅删除您的子记录。
答案 1 :(得分:2)
我有相同的场景,我在bagList中使用了cascade =“all-delete-orphan”,但是当我删除集合中的单个子项时,它也会删除父对象。
答案 2 :(得分:0)
我遇到了与initforthemoney相同的问题,因为我从我的收集器getter返回一个新列表作为ReadOnly。我发现通过将集合的属性访问策略从nosetter
更改为field
,我可以继续使用ReadOnly列表。
答案 3 :(得分:0)
我遇到了一个问题,即我的子元素返回Ordered可枚举的元素。
private readonly IList<Child> children;
public virtual IEnumerable<Child> Children { get { return children.OrderBy(c => c.Position); } }
public virtual void DeleteChild(Child item)
{
children.Remove(item);
}
我将排序移动到我的映射并返回了IEnumerable的子节点。这对我有用!