0

我不明白为什么 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)

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

4

2 回答 2

1

添加Not.KeyNullable()到您的HasMany映射。

注意:此功能需要 NHibernate 3.2。

于 2011-09-16T07:03:44.600 回答
-1

您的父类映射应该为其子类映射

public class ParentClassMap : ClassMap<Parent> 
{
    public ParentClassMap(){
        Id(x => x.ParentId);
        HasMany(x => x.Notes).Cascade.AllDeleteOrphan().Inverse();
    }
}

谢谢尼莱什

于 2011-09-16T06:14:18.597 回答