NHibernate的域对象跨越多个表(NHibernate Domain Object Spans

2019-07-03 23:44发布

假设我有这样的域对象...

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属性映射到“值”列“表3”

使用FluentNHibernate,我怎么能建立一个相关地图对象真的没有中央表作为它的家吗?

Answer 1:

我不是专家,但我不知道是否NHibernate的可以轻松处理这样的映射。 如果能够修改架构,你也许可以定义一个“主表”,刚刚有CommonID​​作为主键。 对于主表的类然后可以通过它们与主表关系中的另一个表作为属性映射。 另一种选择可能是指定的表作为主之一,并且有映射为在主类属性的人。 在任何情况下,它可能会创建这些表之间存在一些的FK关系,以保证组合的“实体”不能拥有它的部件单独拆下一个好主意。



Answer 2:

尝试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");
    });
  }
}


文章来源: NHibernate Domain Object Spans Multiple Tables