Nhibernate保存更新删除关系

时间:2009-09-02 15:05:40

标签: nhibernate save cascade

我的产品有一个或多个产品关系。

实体:产品和产品关联

因此产品具有属性List(Of ProductRelation)

现在我有一个复选框列表,我可以在其中选择一些我想要分配给该产品的产品。

当我使用新产品添加新的ProductRelations集合时,它应删除所有旧关系并保存新关系。但这不起作用。它不会删除旧的,也不会保存新的。

我使用了以下hbm.xml

<bag name="RelatedProduct" inverse="true" lazy="true" cascade="all">
  <key column="FromID" />
  <one-to-many class="Kiwa.Objects.RelatedProduct,Kiwa.Objects" />
</bag>

2 个答案:

答案 0 :(得分:1)

您的hbm文件不可见。 :)

但是,为什么要添加新的系列呢? 这就是事情出错的原因。 您应该清除集合(从集合中删除项目),只需将新项目添加到集合中,而不替换集合本身。

答案 1 :(得分:0)

一旦持久存储,您应该从不替换已映射的集合。 NHibernate需要特定的集合实例(在实体加载期间由NHibernate创建/注入)来跟踪删除。

您应该删除/更新/替换现有集合中的单个元素(例如RelatedProduct个实例)。如果您确实要删除之前保存的所有RelatedProduct并插入新的{为什么?),则可以清除RelatedProduct列表 - 但不要将其替换为新的List实例