2016-08-16 46 views
0

我试图加入两个有一对多关系但没有外键的表。外部在NHibernate上使用linq无外键加入表

在这种情况下,只有一个订单有评论。 我想要所有的订单,并有评论,如果有的话。

SELECT O.OrderNo, O.OrderExpeditionDate, C.Comment 
FROM [Order] O 
LEFT OUTER JOIN OrderComment C 
ON O.OrderNo = C.OrderNo 

结果

OrderNo OrderExpeditionDate  Comment 
---------------------------------------------- 
2222 2008-01-01    Comment 1 
2222 2008-01-01    Comment 2 
23232 1900-01-12    NULL 
77  1900-01-01    NULL 

我如何使用LINQ /流利,NHibernate的NHibernate的实现这一目标

级地图:

public class OrderCommentMap : ClassMap<OrderCommen‌​t> 
{ 
    public OrderCommentMap() 
    { 
    Id(c => c.Id).GeneratedBy.Gu‌​idComb(); 
    Map(c => c.OrderNo); 
    Map(c => c.Comment); 
    Map(c => c.Comment2); 
    } 
} 
+1

后您的'OrderComments'地图类。 – mxmissile

+0

我是NHibernate的新手,但我认为这是你要求的。 公共类OrderCommentMap:类映射 { 公共OrderCommentMap() { ID(C => c.Id).GeneratedBy.GuidComb(); Map(c => c.OrderNo); 地图(c => c.Comment); Map(c => c.Comment2); } } –

回答

0

如果你可以添加一个导航属性您的OrderComment等级:

public virtual Order Order {get;set;} 

然后在你的地图替换Map(c => c.OrderNo)有:

References(x => x.Order).Column("orderno"); 

然后可以使用Fetch创建外连接假设你有你的OrderCommentsOrder导航属性:

var results = session.Query<OrderComments>().Fetch(x => x.Order).Where(...); 
+0

好的。所以如果我想使用linq,没有添加引用就无法做到这一点? –

+0

不是我所知道的。您可以使用HQL或QueryOver来实现外部联接。 – mxmissile