NHibernate Cascade =保存更新“?

时间:2009-07-20 07:07:38

标签: c# nhibernate nhibernate-cascade

免责声明:我是一名NHibernate noobie,所以希望这个问题有道理。我在两个类之间有多对多的关系,比如......

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”吗?

1 个答案:

答案 0 :(得分:26)

是。听起来像'保存更新'就是你想要的,在这种情况下。

我从未在文档中找到每个级联选项的精彩解释,但已使用Ayende的blog post作为参考。

  • - 不要做任何级联,让用户自己处理。
  • save-update - 保存/更新对象时,检查关联并保存/更新任何需要它的对象(包括在多对多方案中保存/更新关联)。
  • 删除 - 删除对象后,删除关联中的所有对象。
  • delete-orphan - 删除对象后,删除关联中的所有对象。除此之外,当一个对象从关联中删除而不与另一个对象(孤立对象)相关联时,也将其删除。
  • 全部 - 当对象保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。
  • all-delete-orphan - 当对象保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。除此之外,当从关联中删除对象而不与另一个对象(孤立对象)关联时,也将其删除。