我有以下情况:
我有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
答案 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();