2011-08-02 23 views
0

我們試圖在DAL中實現規範模式,但遇到了一些問題。看來NHibernate無法將表達式轉換爲可用的表達式,但如果這是問題,我不能100%確定。NHibernate.QueryException與看似簡單的查詢表達式

我有一個客戶對象,其中包含一個社會安全號碼對象,該對象又包含名爲LastSegment的屬性,該屬性僅返回ssn的最後四位數字。在創建搜索針對SSN的最後一段的規範,我們提出了以下表達式,其中值是由用戶通過在搜索條件:

a => a.Customer.Ssn.LastSegment == value 

似乎相當簡單。然而,這在運行時,一個異常被拋出,出現以下錯誤:

NHibernate.QueryException : could not resolve property: Ssn.LastSegment of: [namespace].Customer 

我是不是正確解釋錯誤在NHibernate的我的表情不會翻譯成東西它可以使用?有什麼辦法可以解決這個問題嗎?

作爲進一步說明,當我們在某些對象上調用ToString()時,也會出現此錯誤。

編輯: 挖掘到SocialSecurityNumber對象,我注意到它是一個結構,而不是一個類。這可能會導致問題嗎?

回答

0

它看起來像LastSegment是您添加到分部類中的屬性。你將無法在你的nhibernate表達式中使用它。您將需要更改您的where表達式以使用映射到數據庫的實際屬性(無論引用的是LastSegment)。

如果Segment是你也許能夠做這樣的事情的字符串:

a => a.Customer.Ssn.Segment.SubString(someNumber, 4) == value 
+0

LastSegment實際返回的最後4位數字的財產UnformattedValue的。但是,如果我將表達式更改爲UnformattedValue.EndsWith(value)。它仍然爆發說它不能解決財產:Ssn.UnformattedValue。 – Brian

+0

@布萊恩 - 什麼是UnformattedValue的類型?如果它是一個字符串,可以使用字符串SubString – Aducci

+0

UnformattedValue只是一個字符串:public string UnformattedValue – Brian