NHibernate:双嵌套子查询和“无法找到匹配的条件信息提供程序......”

时间:2011-01-24 07:54:03

标签: nhibernate

我无法解决如何将以下sql导入NHibernate ICriteria:

select * from Contract contract_outer
where exists (
    select 1 from RequiredDocRules
    where not exists (
        select 1 from Contract contract_inner
        inner join ContractDocs contractDocs on cDocs.ContractId = c_inner.Id
        inner join Doc doc doc.Id = contractDocs.DocId
        where contract_inner.Id = contract_outer.Id
        and doc.Type = RequiredDocRules.DocType)
    )
    and RequiredDocRules.ContractType = contract_outer.Type
)

基本上,查询是“根据此类合同的规则向我展示缺少所需文件的合同”。

CreateCriteria如下所示:

var subqueryB = DetachedCriteria.For<Contract>("contract_inner")
    .CreateAlias("contract_inner.Docs", "doc")
    .Add(Restrictions.EqProperty("doc.Type", "rule.DocType"))
    .Add(Restrictions.EqProperty("contract_inner.Id", "contract_outer.Id")
    .SetProjection(Projections.Id());        

var subqueryA = DetachedCriteria.For<RequiredDocRule>("rule")
    .Add(Restriction.EqProperty("rule.ContractType", "contract_outer.Type"))
    .Add(Subqueries.NotExists(subqueryB))
    .SetProjection(Projections.Id());

return Session.CreateCriteria<Contract>("contract_outer")
    .Add(Subqueries.Exists(subqueryA))
    .List<Contract>();

以上代码引发了以下晦涩的异常:

  

无法找到匹配条件   info provider to:contract_inner.Id =   contract_outer.Id和doc.Type =   rule.DocType

我已将问题缩小到“contract_inner.Id = contract_outer.Id”限制。也许它在遍历两层子查询时遇到了麻烦?

我正在使用NHibernate 2.1顺便说一句。

我似乎是唯一获得此异常的人 - 如果你谷歌搜索异常消息,我的另一个Stackoverflow帖子就会出现在第一位。这个问题类似,但不同。太令人沮丧了!

0 个答案:

没有答案