NHibernate域对象跨越多个表

时间:2009-08-28 05:09:50

标签: fluent-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属性映射到表“Table1”
  • 中的“Value”列
  • Table2Value属性映射到表“Table2”
  • 中的“Value”列
  • Table3Value属性映射到表“Table3”
  • 中的“Value”列

使用FluentNHibernate,我如何为这个真正没有中央表的对象设置地图呢?

2 个答案:

答案 0 :(得分: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");
    });
  }
}

答案 1 :(得分:0)

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