我不明白为什么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)
我想补充一点,我不想用双向关系来解决这个问题,我不希望孩子有对父母的引用。谢谢! !
添加Not.KeyNullable()
到您的HasMany
映射
父类映射应该有子类的逆映射
public class ParentClassMap : ClassMap<Parent>
{
public ParentClassMap(){
Id(x => x.ParentId);
HasMany(x => x.Notes).Cascade.AllDeleteOrphan().Inverse();
}
}
谢谢Neelesh