2010-02-12 61 views
3

愚蠢的nHibernate noob問題,但我找不到答案的任何地方...將nHibernate表達式與嵌套表匹配?

我有一個「產品」類成功地映射到產品表和「sku」類。 Sku是「產品」的子對象,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:產品」

這工作:

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?

回答

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