如何在fluent NHibernate中将2个表(1:many)映射到单个域对象?

如何在fluent NHibernate中将2个表(1:many)映射到单个域对象?,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,假设我有Person Id、Name和Address Id、PersonId、Address,以及具有1到0..2关系的I主表。这两者都应映射到单个域对象,如下所示: public class Person() { public virtual string Name; public virtual string PrimaryAddress; public virtual string SecondaryAddress; } IsPrimary列定义它是主=真还是次=假地址。 所

假设我有Person Id、Name和Address Id、PersonId、Address,以及具有1到0..2关系的I主表。这两者都应映射到单个域对象,如下所示:

public class Person()
{
  public virtual string Name;
  public virtual string PrimaryAddress;
  public virtual string SecondaryAddress;
}
IsPrimary列定义它是主=真还是次=假地址。 所以最终应该是两个左连接,附加条件IsPrimary=1或IsPrimary=0

可以在fluent NH中进行这种类型的映射吗?看起来怎么样


谢谢

我想说的是,在这个例子中,您并没有真正进行一对多映射。也许最好让person表更像PersonId、Name、PrimaryAddressId、OtherAddressId。如果要执行一对多操作,为什么不将其映射为一对多,然后创建主地址和辅助地址属性,以在以下地址中查找适当的地址:

public virtual IList<Address> Addresses { get; set; }

财产?我想这对我来说更有意义。

1首先,我不允许更改DB模式,我只能更改c代码和NH映射2我对Person域对象中的地址列表感到满意,但我遇到的问题是无法按任何地址列进行排序,在应用分页之前需要在SQL级别进行排序。如果你能告诉我如何通过NH中的一个连接字段进行左连接排序,这将帮助我解决我的问题。为什么排序在这里很重要?您可以将地址列表用作正确表示数据库的持有者,然后创建属性以提取主地址和辅助地址。属性上的setter也可以做正确的事情并与列表交互。根据你的问题,听起来每个人最多有2个地址,对吗?对,最多有2条记录。然而,棘手的是,最终我必须生成这样的SQL语句SELECT。。。从左加入地址a1的人开始。。。左连接地址a2在。。。其中,a1.IsPrimary=1和a2.IsPrimary=0按a1.Address排序。让我知道在NH除了通过地图之外是否有可能。我不相信就个人地图而言这是可能的。根据用例的不同,这听起来像是一个在存储过程中可能更好的查询。。。如果你还没有查过,我强烈推荐。。。它有助于了解你所有的NHibernate通话的幕后情况。我通常对一个复杂的查询进行几次迭代,然后在NHProf中检查它们,看看它们在做什么。