2012-03-15 88 views
0

我有以下情况:组合模型插入问题

我有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也是如此)。

的DB如下:

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

和关系ChildOneId(父母)< ==> ChildOneId(ChildOnes)。

当我想要在相应的孩子的Db中插入一个新的Parent时,我得到一个ChildOneId/ChildTwoId不能为null的错误。

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

感谢, Tamash

+0

您可以发布您用于创建父对象的代码以及它如何填充ChildOne&ChildTwo属性? – 2012-03-15 14:19:31

回答

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(); 
+0

工作就像一个魅力!非常感谢! – 2012-03-23 23:45:31