2015-10-15 51 views
1

我想創建一個到多個實體之間的連接查詢。正如我給出的例子,Fluent Nhibernate where子句一對多

UserEntity

public class UserEntity 
    { 
     public virtual int Id {get;set;} 
     public virtual IList<Card> Cards{get;set;} 

    } 

而且CardEntity

public class CardEntity 
    { 
     public virtual int Id {get;set;} 
     public virtual int CardNumber {get;set;} 
     public virtual UserEntity User{get;set;} 
    } 

UserMapping

public UserEntityMap() 
    { 
     Table("user"); 
     Id(x => x.Id); 
     HasMany(x => x.Cards).KeyColumn("User_Id").Fetch().Join(); 

    } 

CardMapping

public CardEntityMap() 
    { 
     Table("card"); 
     Id(x => x.Id); 
     Map(x => x.CardNumber); 
     References(x => x.User).Column("User_id"); 
    } 

查詢

var query = _session.QueryOver<UserEntity>(); 
if(!string.IsNullOrEmpty(cardNumber) 
{ 
    query.Where(x=>x.Cards.Any(c=>c.CardNumber == cardNumber)) /// Tried this get an error 
} 

我希望看到像

Select * from user u join card c on c.user_id=u.id where c.number=cardNumber 

我知道必須有這樣做的邏輯方式,但我不能找出一個輸出。謝謝你的幫助。

回答

3

您是否嘗試過使用NHibernate.Linq而不是QueryOver?

如果你把「使用NHibernate.Linq」在文件的頂部,你將能夠使用

_session.Query<UserEntity>(); 

,而不是它可能給你你正在尋找的結果。

或者(使用QueryOver),你可能看使用JoinAlias:

Card card; // Used for alias below 

query.JoinAlias(u => u.Cards,() => card) 
    .Where(() => card.CardNumber == cardNumber) 
+0

好去處! ;)是的,'。任何'與LINQ ===查詢,而不是QueryOver –

+0

感謝您的答案:)我會給JoinAilas一個嘗試。我嘗試查詢而不是QueryOver,但有一些屬性,我需要在QueryOver,所以我用它。我對使用JoinAlias或JoinQueyOver感到困惑,因爲我想必須有更簡單的方法或更好的方法來創建查詢。但我認爲我錯了 – eyildiz