将nHibernate表达式与嵌套表匹配?

时间:2010-02-12 14:51:34

标签: nhibernate

愚蠢的nHibernate noob问题,但我无法在任何地方找到答案......

我有一个“产品”类成功映射到产品表和“sku”类。 Sku是“product”的子对象,DB中的两个表通过主键相关联。

到目前为止,所有基本的nHibernate工作都有效 - 我可以成功地对数据库运行CRUD操作。我可以成功地创建基于表达式的查询,如...

    Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _
        .Add(Expression.Like("Name", nameSearchString)) _
    .List()

..结果是一个产品对象列表,它成功地公开了预期的Sku子对象。但是,如果我尝试上面的代码搜索Sku表中的字段名称,NHibernate会抛出一个错误:

    Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _
        .Add(Expression.Like("SkuCode", skuSearchString)) _
    .List()

结果为“无法解析属性:SkuCode of:Product”

这有效:

    Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Sku _
        .Add(Expression.Like("SkuCode", skuSearchString)) _
    .List()

但是,不出所料,它只返回Sku对象,而我需要产品对象。

这也编译:

    Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _
        .Add(Expression.Like("Name", nameSearchString)) _
        .CreateCriteria("Skus").Add(Expression.Like("SkuCode", skuSearchStrung)) _
    .List()

但它根本没有返回任何内容,即使第一个表达式是有效的

如何针对Sku表中的字段运行Expression.Like?

1 个答案:

答案 0 :(得分:3)

我已经解决了这个问题 - 以为我会把它留在这里供其他人发现。这种事情似乎记录得非常糟糕:

    Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _
        .CreateAlias("Skus", "sku") _
        .Add(Expression.Or( _
        Expression.Like("Name", nameSearchString), _
        Expression.Like("sku.SkuCode", skuSearchStrung))) _
    .List()

我在博客中谈到了我对这个框架的挫败感: http://mattthr.blogspot.com/2010/02/quey-across-join-in-nhibernate.html