Nhibernate保存更新删除关系

Nhibernate保存更新删除关系,nhibernate,save,cascade,Nhibernate,Save,Cascade,我有一个产品有一个或多个产品关系 实体:产品和产品关系 所以产品有一个属性列表(ProductRelation) 现在我有了一个复选框列表,可以在其中选择要分配给此产品的多个产品 当我向新产品添加ProductRelations的新集合时,它应该删除所有旧关系并保存新关系。但这是行不通的。它不会删除旧的,也不会保存新的 我使用了以下hbm.xml <bag name="RelatedProduct" inverse="true" lazy="true" cascade="all">

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

实体:产品和产品关系

所以产品有一个属性列表(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>

您的hbm文件不可见。:)

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

您的hbm文件不可见。:)

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

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


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

您应该在映射的集合被持久化后,永远不要替换它。NHibernate需要特定的集合实例(由NHibernate在实体加载期间创建/注入)来跟踪删除


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

执行此操作的最简单方法是将集合属性声明为受保护集,因此,您在替换它时受到限制。强制执行此操作的最简单方法是将集合属性声明为受保护集,因此您在替换它时受到限制。