愚蠢的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?
答案 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