Я в процессе преобразования проекта 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). Почему этот запрос не работает?