不确定如何使用Fluent NHibernate连接表

不确定如何使用Fluent NHibernate连接表,nhibernate,fluent-nhibernate,nhibernate-mapping,linq-to-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Linq To Nhibernate,Fluent Nhibernate Mapping,我在遗留表上使用NHibernate,在查看了我们的代码库之后,我似乎是唯一有这种需要的人。我需要连接两个表以便运行查询,但我今天没有取得任何进展。我将尝试在代码片段中对有意义的地方进行缩写。想帮忙吗 表格-- Order OrderID (primary key) OrderName OrderType OrderLocation OrderAppendix ID (composite key) Key (composite key) Value (composite key)

我在遗留表上使用NHibernate,在查看了我们的代码库之后,我似乎是唯一有这种需要的人。我需要连接两个表以便运行查询,但我今天没有取得任何进展。我将尝试在代码片段中对有意义的地方进行缩写。想帮忙吗

表格--

Order
 OrderID (primary key)
 OrderName
 OrderType
 OrderLocation

OrderAppendix
 ID (composite key)
 Key (composite key)
 Value (composite key)
[Serializable]
public class Order
{
     public virtual string OrderID { get; set; }
     ...
     public virtual string OrderLocation { get; set; }
}

[Serializable]
public class OrderAppendix
{
     public virtual string ID { get; set; }
     public virtual string Key { get; set; }
     public virtual string Value { get; set; }

     public override bool Equals(object obj)
     {
          ...
     }

     public override int GetHashCode()
     {
          ...
     }
}
OrderAppendix复合键的ID部分与Order表中的OrderID相关联;因此,在OrderAppendix表中,和Order可以有多个条目

域对象--

Order
 OrderID (primary key)
 OrderName
 OrderType
 OrderLocation

OrderAppendix
 ID (composite key)
 Key (composite key)
 Value (composite key)
[Serializable]
public class Order
{
     public virtual string OrderID { get; set; }
     ...
     public virtual string OrderLocation { get; set; }
}

[Serializable]
public class OrderAppendix
{
     public virtual string ID { get; set; }
     public virtual string Key { get; set; }
     public virtual string Value { get; set; }

     public override bool Equals(object obj)
     {
          ...
     }

     public override int GetHashCode()
     {
          ...
     }
}
映射

internal sealed class OrderMap : ClassMap<Order>
{
     Table("Order");
     Id(x => x.OrderID).Column("OrderID").Length(20).GeneratedBy.Assigned();
     Map( x => x.OrderName).Column("OrderName")
     ....
}

internal sealed class OrderAppendixMap : ClassMap<OrderAppendix>
{
     Table("OrderAppendix");
     CompositeId()
         .KeyProperty(x => x.ID, "ID")
         ....
     Map( x => x.ID).Column("ID);
     ...
}
编辑

这里是我通过阅读“QueryOver”文档得到的信息

Order=null;
OrderAppendix OrderAppendix=null;
resultList=session.QueryOver(()=>Order)
.JoinAlias(()=>Order.OrderAppendix,()=>OrderAppendix)
.Where(()=>OrderAppendix.Key==“匹配此”)
.List();

我认为使用别名加入表是正确的,但显然我还没有找到一种方法来通知NHibernate所需的多对一映射。另外,您可以看到,为了使用别名功能,我在Order中添加了OrderAppendix类型的属性

好吧,我不明白为什么你们不使用标准的亲子方法,在订单端使用HasMany,并参考附录。这是因为附录侧的复合键

如果您愿意这样做,您将能够提供以下HQL:

从订单o中选择o
左连接获取o.apxs a
其中a.Key=“Stuff”

如果我能在运行时只为这一个查询连接表,我也会更愿意这样做。