我无法理解为什么NHibernate在没有父键的外键的情况下插入子实体。 我发现解决这个问题的唯一方法是双向关系,还有另外一种方法吗?
以下是课程:
public class Parent
{
public virtual int ParentId {get; private set;}
public virtual IList<Child> Notes {get; private set;}
}
public class Child
{
public virtual ChildId {get; private set;}
public virtual Name {get; private set;}
}
这是我的Fluent NHibernate映射
public class ParentClassMap : ClassMap<Parent>
{
public ParentClassMap(){
Id(x => x.ParentId);
HasMany(x => x.Notes).Cascade.AllDeleteOrphan();
}
}
public class ChildClassMap : ClassMap<Child>
{
public ChildClassMap() {
Id(x => x.ChildId);
Map(x => x.Name);
}
}
当我将子项添加到父项的子集合并保存父项时,父项和子项将插入到数据库中,但子项是插入而没有外键到父项(它具有空值)
这是生成的插入内容:
INSERT INTO Child(ChildId, Name)
但它应该是:
INSERT INTO Child(ChildId, Name, ParentId)
我想补充一点,我不想用双向关系来解决这个问题,我不希望孩子有一个父母的引用。谢谢!
答案 0 :(得分:1)
将Not.KeyNullable()
添加到您的HasMany
映射中。
注意:此功能需要NHibernate 3.2。
答案 1 :(得分:-1)
您的父类映射应该具有其子项的反转
public class ParentClassMap : ClassMap<Parent>
{
public ParentClassMap(){
Id(x => x.ParentId);
HasMany(x => x.Notes).Cascade.AllDeleteOrphan().Inverse();
}
}
由于 Neelesh