2010-04-21 55 views
2

子查詢,我通常使用查詢界面的DetachedCriteria NHibernate的接口:使用了NHibernate的

DetachedCriteria crit = DetachedCriteria.For<IParent>(); 

這工作得很好。

我現在要創建一個子對象這樣的子查詢:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>(); 

,並把它添加到標準,這樣(種,p.Child實際上是一個別名,但我已經簡化)

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit)); 

這工作,如果我DetchedCriteria是一個孩子:

DetachedCriteria subcrit = DetachedCriteria.For<Child>(); 

但不是它它的界面(如上)。在這種情況下,我得到一個例外:

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild 

這是什麼意思是或我缺少一些配置?

+1

IChild是否明確提及任何映射?如果不是,我認爲你需要它(。進口流利nhibernate我認爲) – Nicholas 2011-07-07 00:18:18

+0

有沒有辦法執行這樣一個導入與HBN映射(例如沒有流利Nhibernate)? – 2012-09-12 07:50:33

回答

0

我不認爲你會在這種情況下能夠查詢接口,因爲NHibernate將無法找到你打算查詢的正確的實現類。例如,假設你有另一個名爲ChildLight的IChild實現者(或者映射到不同表的東西),NHibernate沒有指示哪個實現類需要檢索。

您需要創建一個DetachedCriteria.For < Child>()而不是接口。