2011-02-14 78 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"); 

如果这没有你的真实情况帮助,你可能会问的真实案例的解决方案。我不认为有一个通用的解决方案。