C# Nhibernate未将parentid插入子项

C# Nhibernate未将parentid插入子项,c#,nhibernate,oracle11g,fluent,C#,Nhibernate,Oracle11g,Fluent,我手头有个奇怪的问题。首先看一下我的表模式 A(身份证) B(身份证、辅助证) C(ID、AID) D(ID,CID) 地图文件如下所示: MAP A { HasMany(x => x.B).Cascade.AllDeleteOrphan().Inverse().KeyColumn("AID"); HasMany(x => x.C).Cascade.AllDeleteOrphan().Inverse().KeyColumn("AID"); } MAP B { References(

我手头有个奇怪的问题。首先看一下我的表模式

A(身份证) B(身份证、辅助证) C(ID、AID) D(ID,CID)

地图文件如下所示:

MAP A
{
HasMany(x => x.B).Cascade.AllDeleteOrphan().Inverse().KeyColumn("AID");
HasMany(x => x.C).Cascade.AllDeleteOrphan().Inverse().KeyColumn("AID");
}

MAP B
{
References(x => x.A).Column("AID");
}

MAP C
{
References(x => x.A).Column("AID");
HasMany(x => x.D).Cascade.AllDeleteOrphan().Inverse().KeyColumn("BID");
}

MAP D
{
References(x => x.C).Column("CID");
}

在A上执行SaveORUpdate/Merge时,它不会将AID插入B和C,但会将CID插入D。有任何建议。

如果发生这种情况,您肯定会错过分配关系的两侧。如果这一点得以落实:

var parent = ...;
var child = ...;
parent.Children.Add(child);
child.Parent = parent;
一切都会成功的。因为这里最令人惊讶的是您的代码如下:

var parent = ...;
var child = ...;
parent.Children.Add(child);
// child.Parent = parent; // this is missing
这不会插入孩子。为什么?

因为我们使用了
.Inverse()
映射。这是一个非常强大但脆弱的环境。它允许NHibernate进行一些重要的优化,但这需要在child中设置-父项

看看这篇好文章


mykong

我正确地添加了关系。同样,在例子中也可以看到反方向。唯一可以看到的是你问题中的反方向。这就是我解释发生了什么的原因。因为没有关于如何分配子级和父级的代码。。。NHibernate simpley知道:相反的情况已经发生了。我将把那部分留给每个孩子。如果未正确设置孩子。。。什么也不会发生。好消息是,对父级的级联仍然足以让我们只说session.Save(父级)。。。(还有一个提示,你的问题对任何人来说都比ABCD更容易理解)用流利的语言,我们可以说Inverse(),它是有效的。此外,我还做了B.A=A C.A=A和D.C=C。在此之后,我保存了A。这是汽车制造商的问题,与Nhibernate毫无关系。坏我现在说得通了;)NHibernate可能是工具;)享受吧,先生;)