2009-08-28 29 views
0

假设我有这样的域对象...NHibernate的域对象跨越多个表

public class SpansMultipleTables 
{ 
    public int CommonID {get; set;} 

    public string Table1Value {get; set;} 

    public int Table2Value {get; set;} 

    public float Table3Value {get; set;} 
} 
  • 的CommonID​​属性映射到所有表上的“ID”栏。
  • 的Table1Value属性映射到表“表1”中的“值”列
  • 的Table2Value属性映射到表“表2”
  • 的Table3Value属性映射的“值”列,以“值”列表中的列表“Table3”

使用FluentNHibernate,我该如何为这个对象设置一个真正没有中央表的地图,因为它是家?

回答

0

我不是专家,但我不确定NHibernate是否可以轻松处理这样的映射。如果您能够修改架构,您可能可以定义一个“主”表,它只有CommonID​​作为主键。主表的类可以通过与主表的关系将其他表映射为属性。另一种选择可能是将其中一个表指定为主,并将其他表映射为主类的属性。在任何情况下,在这些表之间创建一些FK关系可能是一个好主意,以保证组合的“实体”不能单独删除其部分。

5

尝试Join,但我会建议改变你的设计。

public class SpansMultipleTablesMap : ClassMap<SpansMultipleTables> 
{ 
    public SpansMultipleTablesMap() 
    { 
    Id(x => x.CommonID); 
    Join("Table1", m => 
    { 
     m.Map(x => x.Table1Value, "Value"); 
    }); 
    Join("Table2", m => 
    { 
     m.Map(x => x.Table2Value, "Value"); 
    }); 
    Join("Table3", m => 
    { 
     m.Map(x => x.Table3Value, "Value"); 
    }); 
    } 
} 
+0

+1我可能会被迫走这条路,因为我的团队的高级开发人员拒绝接受这是一个糟糕的,不可维护的设计。 –

+0

-1对于愚蠢的Snr Devs –

+0

///

///将此实体链接到另一个表,从两个或多个表创建一个合成实体。这只适用于如果您处于每个继承层次结构中的策略。 /// ................................. 请阅读智能感知文档,为您尝试此操作。 – granadaCoder