2011-02-14 83 views
3

嵌套多次後,我無法使DetachedCriteria正常工作,原因是DetatchedCriteria只能訪問高一層的別名實體。NHibernate:DetachedCriteria不止一次嵌套

下無法正常工作,例如:

var secondNestedCriteria = DetachedCriteria.For<Baz>("baz") 
    .SetProjection(Projections.Id()) 
    .Add(Restrictions.EqProperty("baz.FooName", "foo.Name") // Doesn't work 
    .Add(Restrictions.EqProperty("baz.BarName", "bar.Name"); 

var firstNestedCriteria = DetachedCriteria.For<Bar>("bar") 
    .SetProjection(Projections.Id()) 
    .Add(Restrictions.EqProperty("bar.FooName", "foo.Name") 
    .Add(Subqueries.Exists(secondNestedCriteria); 

var criteria = Session.CreateCriteria<Foo>("foo") 
    .Add(Subqueries.Exists(firstNestedCriteria) 
    .List<Foo>(); 

有誰知道,不使用HQL涉及解決方法嗎?

回答

0

我從來沒有這個問題,我通常使用PropertyIn來加入子查詢,但是你不能總是這樣做。

在這種特殊情況下,您可以通過使用第二個查詢的屬性修正:

var secondNestedCriteria = DetachedCriteria.For<Baz>("baz") 
    .SetProjection(Projections.Id()) 
    .Add(Restrictions.EqProperty("baz.FooName", "bar.FooName") // is equal to foo.Name 
    .Add(Restrictions.EqProperty("baz.BarName", "bar.Name"); 

如果這沒有你的真實情況幫助,你可能會問的真實案例的解決方案。我不認爲有一個通用的解決方案。