Fluent NHibernate中的复合模型插入问题

时间:2012-03-15 11:04:08

标签: c# hibernate nhibernate fluent-nhibernate

我有以下情况:

我有2个类(子)和复合类(父类):

public Parent
{
   public ChildOne C1 {get;set;}
   public ChildTwo C2 {get;set;}
}

public ChildOne
{
    public int Id{get;set;}
...some primitive fields
}

public ChildTwo
{
    public int Id{get;set;}
...other primitive fields
}

这些类的映射如下:

public class Parent: ClassMap<Parent>
    {
        public ParentMap()
        {
            Table("Parents");
            Id(x => x.Id).Column("ParentId"); 
            References(x => x.C1).Column("ChildOneId");
            References(x => x.C2).Column("ChildTwoId");
        }
    }

public class ChildOne: ClassMap<ChildOne>
    {
        public ChildOneMap()
        {
            Table("ChildOnes");
            Id(x => x.Id).Column("ChildOneId"); 
            ...other Mappings for primitive types
        }
    }

(和ChildTwo一样)。

数据库如下:

Parents: ParentId, ChildOneId, ChildTwoId
ChildOne: ChildOneId, ...other columns
ChildOne: ChildTwoId, ...other columns

和关系ChildOneId(Parents)&lt; ==&gt; ChildOneId(ChildOnes)。

当我想在Db中插入具有相应子节点的新Parent时,我得到ChildOneId / ChildTwoId不能为空的错误。

我需要在映射类中指定什么才能使插入工作? (检索操作正常)

谢谢, Tamash

1 个答案:

答案 0 :(得分:1)

我猜你不会给孩子打电话。

session.Save(new Parent { C1 = new ChildOne(), C2 = new ChildTwo() });

使用级联来执行从父级保存子级。

References(x => x.C1).Column("ChildOneId").Cascade.All();
References(x => x.C2).Column("ChildTwoId").Cascade.All();