2016-08-16 62 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