nhibernate:从集合中删除对象而不删除它

时间:2011-09-15 03:09:19

标签: c# nhibernate collections

假设我们有一个SPACE_SHIP和WEAPON对象。 SPACE_SHIP有一个主要的WEAPON和一个次要WEAPON的集合。我想切换初级和其中一个辅助WEAPON,我该怎么做?

如果我这样做:

  1. mySpaceShip.SecondaryWeapons.Add(mySpaceShip.PrimaryWeapon)
  2. mySpaceShip.PrimaryWeapon = theSecondaryWeaponToSwitch
  3. mySpaceShip.SecondaryWeapons.Remove(theSecondaryWeaponToSwitch)
  4. 发生NHibernate错误......我该怎么办?

    上下文:NHibernate 1.2,C#3.5

1 个答案:

答案 0 :(得分:1)

你最有可能用cascade="all-delete-orphan"映射它。这样做时,NH会删除已从集合中删除的所有实例。如果你试图在另一个集合中使用该实例,那么NH会抱怨。

NH没有实现“持久性垃圾收集”来自动检测哪些实例被引用而哪些实例未被引用。这将是一个非常强大的性能影响。 “delete-orphan”是它的简化版本,它适用于许多简单的情况,但是如果你移动实例则不起作用。