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

我在遗留表格上使用NHibernate,并在查看我们的代码库之后,我似乎是唯一有此需求的人。 我需要加入两个表格才能运行查询,但我今天还没有取得任何进展。 我会尽量在我的代码片段中缩写它的意义。 小心帮忙?

Tables--

Order
 OrderID (primary key)
 OrderName
 OrderType
 OrderLocation

OrderAppendix
 ID (composite key)
 Key (composite key)
 Value (composite key)

OrderAppendix组合键的ID部分与Order表中的OrderID相关联; 因此,Order在OrderAppendix表中可以有多个条目。

域对象 -

[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);
     ...
}

我不会因为我尝试加入这些表而浑浑噩噩,但我想要做的事情是查询OrderType或OrderLocation,因为结果都与OrderAppendix表具有相同的值。

示例所需的SQL

SELECT * FROM ORDER
INNER JOIN
 ON Order.OrderID = OrderAppendix.ID
WHERE OrderAppendix.Key = "Stuff"

编辑

这里是我通过阅读“QueryOver”文档获得的地方

http://nhibernate.info/doc/nh/en/index.html#queryqueryover

Order Order = null;
OrderAppendix OrderAppendix = null;

resultList = session.QueryOver<Order>(() => Order)
     .JoinAlias(() => Order.OrderAppendix, () => OrderAppendix)
     .Where(() => OrderAppendix.Key == "MatchThis")
     .List();

我想我正在使用别名加入表的正确轨道,但显然我没有找到一种方法来通知NHibernate需要的多对一映射。 此外,您可以看到我已将OrderAppendix类型的属性添加到Order以便使用别名功能。


那么,我没有明白为什么你没有在Order方面使用HasMany的标准亲子方法,并且参考了附录。 这是因为附录侧的组合键?

如果你这样做,你将能够提供以下HQL:

SELECT o FROM Order o LEFT JOIN FETCH o.apxs a WHERE a.Key="Stuff"

链接地址: http://www.djcxy.com/p/61001.html

上一篇: Not sure how to join tables using Fluent NHibernate

下一篇: Fluent Nhibernate, References and too many queries