NHibernate不能使用containsstable()查询的结果

时间:2011-07-24 07:16:14

标签: nhibernate sql-server-2008 fluent-nhibernate

我正在将LINQ2SQL项目转换为使用NHibernate。我无法有效移植的一个查询是全文搜索。以前我使用存储过程来完成搜索,但现在我直接将其作为查询访问。 SQL查询是:

select a.id, a.parentID, a.text, a.summary
from articles a
    inner join containstable(articles, (summary, text), :query) ar on
        a.id = ar.[KEY]
order by ar.RANK desc

当我在SSMS中运行查询时,我得到了我期望的结果 - 只是articles表的匹配项。但是,NHibernate似乎无法解释结果。我查询的代码是:

IQuery q = session.CreateSQLQuery(
            "select a.id, a.parentID, a.[text], a.summary from articles a "
        +   "inner join containstable(articles, (summary, text), :query) ar on "
        +   "a.id = ar.[KEY] "
        +   "order by ar.RANK desc")
    .SetParameter<string>("query", query);

var results = q.List<article>();

NHibernate抛出一个错误System.Object[]无法转换为我的POCO类型。我尝试了非泛型List()方法,发现该列表中的每个项目都是一个对象数组。表上的其他查询工作正常,但这是唯一的SQL查询(其他一切都是Criteria或QueryOver)。为什么这个查询不起作用?

2 个答案:

答案 0 :(得分:2)

您需要告诉NH这些行代表什么。

session.CreateSQLQuery(...)
       .AddEntity(typeof(Article))
       .SetParameter(...)
       .List<Article>();

阅读Chapter 16. Native SQL了解更多详情

答案 1 :(得分:1)

如果您直接将查询作为SQL运行,那么即使表格已映射,NHibernate也不知道如何将其映射到您的POCO。您需要向NHibernate提供有关如何映射SQL投影的一些信息。

如果这是一个对您开放的选项,请使用HQL或LinqToNHibernate。