2011-01-20 107 views
2

我知道類似的問題已被要求herehere它可能是重複的。NHibernate - 沒有映射加入

但問題並沒有在這兩個地方適當的那麼不情願地回答,我再問它:(

問題是,你可以使用標準的API來連接兩個表時,有沒有之間的可用映射它們。

class Order{ UserId , OrderId} 
class User{UserId , UserName} 

,我需要生成查詢一樣,

select user.UserName , order.OrderId from Order order join User user on order.UserId = user.UserId 

如果有人知道this..and的請你注意,我需要使用標準或QueryOver技術

感謝 /BB它做的請幫忙

回答

5

這裏是它如何可以做到的想法,但這有點難看。

由於映射沒有規定的關係令和用戶之間存在因此它是相當難有NHibernate的產生這兩個表之間的聯接。 你可以做的卻是做一個內部的選擇讓你查詢的SQL是這樣的:

SELECT o.OrderId, o.WhateverOtherPropertyNameFromOrder 
     (SELECT u.UserName, u.WhateverOtherPropertyNameFromUser 
     FROM User u 
     WHERE u.UserId = o.UserId) 
FROM Order o 

這可以這樣做了QueryOver:

Order order = null; 
User user = null; 

QueryOver<User> query = QueryOver.Of<User>(() => user) 
    .Select(Projections.ProjectionList() 
       .Add(Projections.Property<User>(x => x.UserName))) 
       .Add(Projections.Property<User>(x => x.WhateverOtherPropertyNameFromUser))) 
    .Where(Restrictions.EqProperty("user.Id", "order.UserId")); 

var result = session.QueryOver<Order>(() => order) 
    .Select(Projections.ProjectionList() 
      .Add(Projections.Property<Order>(c => c.OrderId)) 
      .Add(Projections.Property<Order>(c => c.WhateverOtherPropertyNameFromOrder)) 
      .Add(Projections.SubQuery(query))) 
    .List<object[]>(); 

我不知道,如果這對你來說是有用的,但它是你的問題的一個潛在的解決方案。

+0

謝謝,但我決定添加映射。要知道這是不可能的,沒有映射確實是有幫助的。 :) – Illuminati 2011-01-24 06:46:57