13

免责声明:我是 NHibernate noobie,所以希望这个问题是有道理的。我有两个类之间的多对多关系,例如......</p>

public class Entity1
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity2> Entity2List;
} 

Public class Entity2
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity1> Entity1List;
}

我在两个类映射中都添加了与包的多对多关系,定义了一个关联表,但不确定要使用哪个级联选项。我希望能够创建一个新的 Entity1 实例,将一个新的 Entity2 实例添加到它的列表中,调用 Save,并将两者都插入到数据库中(反之亦然)。删除实体时,它应该删除与子实体的任何关联,而不是子实体本身。我应该使用 cascade="save-update" 吗?

4

1 回答 1

28

是的。在这种情况下,这听起来像是您想要的“保存更新”。

我从来没有在文档中找到对每个级联选项的很好解释,但我使用了 Ayende 的这篇博文作为参考。

  • none - 不做任何级联,让用户自己处理。
  • 保存更新- 当对象被保存/更新时,检查关联并保存/更新任何需要它的对象(包括保存/更新多对多场景中的关联)。
  • delete - 当对象被删除时,删除关联中的所有对象。
  • delete-orphan - 当对象被删除时,删除关联中的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象关联(孤立)时,也将其删除。
  • all - 当一个对象被保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。
  • all-delete-orphan - 当一个对象被保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象关联(孤立)时,也将其删除。
于 2009-07-20T08:13:43.853 回答