2012-06-11 86 views
0

我使用NHibernate與流利的映射。我有以下情況:Nhibernate過濾屬性內的參考屬性使用查詢

public class A 
{ 
    public virtual int ID{get; set;} 
    public virtual B BReference {get; set;} 
    public virtual string aProperty {get; set;} 
} 

public class B 
{ 
    public virtual int ID {get;set;} 
    public virtual string Name {get; set;} 
} 

public class MapA: Map<A> 
{ 
    Id(x=> x.ID); 
    Map (x=> x.aProperty); 
    References(x => x.BReference); 
} 

public class MapB : Map<B> 
{ 
    Id(x=>x.ID); 
    Map(x=>x.Name); 
} 

我想要做的是過濾屬性A.BReference.Name上的A對象。我現在用的是queryover做我的疑問:

public object GetResult(ISession session) 
{ 
    var result = session.QueryOver<A>.Where(a=> a.BReference.Name=="Value").List(); 
    return result; 
} 

目前NHibernate的拋出一個異常無法解析屬性BReference.Name的:A.

是否有某種方式來克服這個propblem?我現在不能更改查詢轉換模式,因爲我們依賴它。 感謝您的幫助。

回答

1

嗨,你必須使用JoinAlias加載相關的表,然後再編寫標準。

B bReference = null; 
var result = session.QueryOver<A>() 
.JoinAlias(x => x.BReference,() => bReference, NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
.Where(x => bReference.Name == "Value").List<A>(); 
+0

有沒有其他解決方案沒有使用別名? –

+0

@Manar Husrieh是的。你可以使用Linq到NHibernate。爲什麼別名對你不利? –

+0

因爲我們正在使用動態代碼,並且我們已經實現了沒有別名和queryover。 –