Fluent NHibernate使用HasMany关系插入父ID问题

时间:2011-09-16 04:41:36

标签: nhibernate fluent bidirectional-relation

我无法理解为什么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)

我想补充一点,我不想用双向关系来解决这个问题,我不希望孩子有一个父母的引用。谢谢!

2 个答案:

答案 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