代码之家  ›  专栏  ›  技术社区  ›  John

nhibernate cascade=保存更新“?

  •  11
  • John  · 技术社区  · 17 年前

    免责声明:我是一个没有人性的人,所以希望这个问题是有意义的。我在两个阶级之间有一种多对多的关系,像_

    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 回复  |  直到 9 年前
        1
  •  25
  •   Ian Tunbridge    9 年前

    对。在本例中,“保存更新”听起来像是您想要的。

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

    • 没有人 -不要做任何级联,让用户自己处理它们。
    • 保存更新 -保存/更新对象时,检查关联并保存/更新任何需要它的对象(包括在多对多方案中保存/更新关联)。
    • 删除 -删除对象后,删除关联中的所有对象。
    • 删除孤儿 -删除对象后,删除关联中的所有对象。除此之外,当一个对象从关联中移除并且不与另一个对象关联(孤立)时,也要删除它。
    • 全部的 -当一个对象是保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。
    • 全部删除孤立 -当一个对象是保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中移除并且不与另一个对象关联(孤立)时,也要删除它。
    推荐文章