NHibernate.QueryException似乎是一个简单的查询表达式

时间:2011-08-02 18:53:44

标签: linq nhibernate linq-to-nhibernate

我们正在尝试在DAL中实现规范模式,但遇到了一些问题。似乎NHibernate无法将表达式转换为可用的东西,但如果这是问题,我不能100%肯定。

我有一个包含社会安全号码对象的客户对象,该对象又包含一个名为LastSegment的属性,该属性只返回ssn的最后四位数字。在创建搜索ssn最后一段的规范时,我们提出了以下表达式,其中value是用户传入的搜索条件:

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

似乎相当简单。但是,运行此命令时会抛出异常,并显示以下错误:

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

我是否正确解释错误,因为NHibernate无法将我的表达式翻译成可以使用的东西?有没有办法解决这个问题?

另外请注意,当我们在某些对象上调用ToString()时,我们也会收到此错误。

编辑: 深入研究SocialSecurityNumber对象,我注意到它是一个结构而不是一个类。这会导致问题吗?

1 个答案:

答案 0 :(得分:0)

看起来LastSegment是您在分部类中添加的属性。您将无法在nhibernate表达式中使用它。您需要更改where表达式以使用映射到数据库的实际属性(无论LastSegment引用什么)。

如果Segment是一个字符串,您可以执行以下操作:

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