Nhibernate没有将parentid插入孩子

时间:2015-01-30 10:27:05

标签: c# nhibernate oracle11g fluent

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

A(ID) B(ID,AID) 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.任何建议。

1 个答案:

答案 0 :(得分:0)

如果发生这种情况,您肯定错过了分配关系的双方。如果这样的话:

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做一些重要的优化,但这需要 - PARENT必须在子中设置。

查看这篇精彩的文章

mykong

Inverse = “true” example and explanation