Fluent nhibernate NHibernate域对象跨越多个表

Fluent nhibernate NHibernate域对象跨越多个表,fluent-nhibernate,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属

假设我有这个域对象

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,我如何为这个对象设置一个地图,而这个对象实际上没有一个中心表作为它的家?

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

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

尝试
加入
,但我建议更改您的设计

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");
    });
  }
}
public类span多应用表映射:类映射
{
公共SpansMultipleTablesMap()
{
Id(x=>x.CommonID);
加入(“表1”,m=>
{
m、 映射(x=>x.Table1Value,“值”);
});
加入(“表2”,m=>
{
m、 Map(x=>x.Table2Value,“Value”);
});
加入(“表3”,m=>
{
m、 映射(x=>x.Table3Value,“值”);
});
}
}

尝试
加入
,但我建议更改您的设计

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");
    });
  }
}
public类span多应用表映射:类映射
{
公共SpansMultipleTablesMap()
{
Id(x=>x.CommonID);
加入(“表1”,m=>
{
m、 映射(x=>x.Table1Value,“值”);
});
加入(“表2”,m=>
{
m、 Map(x=>x.Table2Value,“Value”);
});
加入(“表3”,m=>
{
m、 映射(x=>x.Table3Value,“值”);
});
}
}

+1我可能被迫走这条路,因为我团队的高级开发人员拒绝接受这是一个糟糕且无法维护的设计。///////将此实体链接到另一个表,以从两个或多个表创建复合实体。这仅在您位于表中时有效,每个继承层次结构///策略。//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。请阅读intellisense文档并尝试此操作。+1我可能被迫走这条路,因为我团队的高级开发人员拒绝接受这是一种糟糕且无法维护的设计。///////将此实体链接到另一个表,以从两个或多个表创建复合实体。这仅在您位于表中时有效,每个继承层次结构///策略。//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。请阅读intellisense文档,然后尝试此操作。