gpt4 book ai didi

Nhibernate 有很多插入会生成额外的更新(无反向)

转载 作者:行者123 更新时间:2023-12-02 20:26:04 24 4
gpt4 key购买 nike

我有一个父类,其中包含两个子类列表

    public class Parent
{
...

public virtual ICollection<Foo> Foo{ get; set; }

public virtual ICollection<Bae> Bar{ get; set; }
}

public class Foo
{
...

public virtual Parent Parent{ get; set; }
}

public class Bar
{
...

public virtual Parent Parent{ get; set; }
}

映射是

        public ParentMap()
{
...

HasMany(m => m.Foo).AsSet().Cascade.All();
HasMany(m => m.Bar).AsSet().Cascade.All();
}

public FooMap()
{
...

References(m => m.Parent);
}

public BarMap()
{
...

References(m => m.Parent);
}

每当我保存父对象时,我都会得到

INSERT Parent ...
INSERT Foo with Parent_id set to NULL
INSERT Bar with Parent_id set to NULL
UPDATE Foo set Parent_id to Parent id
UPDATE Bar set Parent_id to Parent id

有没有办法除了将关系设置为反向以避免额外的更新?

最佳答案

如果您有双向关联,您应该将 HasMany 端设置为反向,这是最常见的方法。

另一种可能性是将父引用设置为 Not.Insert().Not.Update(),然后插入/更新时将完全忽略父属性。

如果您不需要从子级到父级的引用,只需将其从类和映射中删除,这样您就只有集合。

对于第二种和第三种方式,您可以在 HasMany 上另外设置 Not.KeyNullable() ,这可以确保 NHibernate 插入已设置父 ID 的新行,并避免额外的更新语句(此功能需要 NHibernate 3.2.0)。

关于Nhibernate 有很多插入会生成额外的更新(无反向),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com