因此,对于 n-hibernate 和流利的 n-hibernate 而言,我对映射和级联更改子对象感到有些困惑。
我有一个包含多个集合的对象,当我创建一个新对象时,它会创建子对象并将它们插入各自的表中。这一切都很好。但是,当我用表面上子对象的更改来更新父对象时,它似乎按照我想要的方式流动。更重要的是,当查看数据库时,我看到它没有更新子对象记录,而是插入了新记录并从原始记录中删除了与父对象的关联,而不是仅仅更新它们。
为了添加额外的解释,我们使用 AutoMapping 和 MappingOverrides。所以这里是我正在使用的代码的简要介绍。
public class ParentObjectOverride : IAutoMappingOverride<ParentObject>
{
public void Override(AutoMapping<ParentObject> mapping)
{
mapping.HasMany(x => x.Chid1).Cascade.SaveUpdate().Table("chid1Table");
mapping.HasMany(x => x.Child2).Cascade.SaveUpdate().Table("child2Table");
}
}
public class Child1Override : IAutoMappingOverride<Child1>
{
public void Override(AutoMapping<Child1> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
public class Child2Override : IAutoMappingOverride<Child2>
{
public void Override(AutoMapping<Child2> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
确实没有子对象独立于 ParentObject 保存的情况。我试过 cascade.all() 和 cascade.saveupdate() 都产生相同的结果。
我已经阅读了几篇关于使用 AllDeleteOrphan 的文章,但我不明白为什么它不应该只更新子行而不是创建新行并删除旧行。也许我只是不明白映射概念。
任何帮助表示赞赏