2013-10-23 25 views
0

我有嵌套在另一个类:压扁的嵌套对象为一行在NHidernate

public class InnerClass 
{ 
    public string InnerProp1 { get; set; } 
    public string InnerProp2 { get; set; } 
} 

public class OuterClass 
{ 
    public string OuterProp1 { get; set; } 
    public string OuterProp2 { get; set; } 
    public InnerObject InnerClass { get; set; } 
} 

而且我想它映射到这个表:

CREATE TABLE FlatTable 
(
    OuterProp1 VARCHAR(20), 
    OuterProp2 VARCHAR(20), 
    InnerProp1 VARCHAR(20), 
    InnerProp2 VARCHAR(20), 
) 

我已经尝试了天真的映射

Property(x => x.OuterProp1); 
Property(x => x.OuterProp2); 
Property(x => x.InnerObject.InnerProp1); 
Property(x => x.InnerObject.InnerProp2); 

这将失败,ArgumentNullException我怀疑是由于x.InnerObject贝ng null。

如何创建此映射?

+0

'公共当前虚拟string'所有道具都必须虚拟 – wudzik

回答

2

使用组件

Property(x => x.OuterProp1); 
Property(x => x.OuterProp2); 
Component(
    x => x.InnerClass, 
    comp => 
    { 
     comp.Property(x => x.InnerProp1); 
     comp.Property(x => x.InnerProp2); 
    }); 
+0

谢谢,那是让我过去,大多数的问题,但是当我试图从表中加载它的将InnerClass为空。 – baralong

+0

好吧,如果我让InerClass虚拟,那么它会被创建。 @ wudzik的评论帮助了这一点。 – baralong

+0

对不起,事实证明我并不需要它是虚拟的。 – baralong