2011-07-24 18 views
1

NHibernateを使用するようにLINQ2SQLプロジェクトを変換中です。私が効果的に移植することができなかった1つのクエリはフルテキスト検索です。以前は、ストアドプロシージャを使用して検索を行っていましたが、今は直接クエリとしてアクセスしています。 SQLクエリは次のとおりです。NHibernateはcontainsstable()クエリの結果を使用できません

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

NHにこれらの行が何を表すかを伝える必要があります。詳細

+0

ため

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

読むChapter 16. Native SQLは、これはそれをやった、ありがとう!私はそれが私が午前3時にコーディングするために得るものだと思う:) – cmv

1

SQLとして直接クエリを実行している場合、NHibernateは、テーブルがマップされていても、POCOにマッピングする方法を知らないでしょう。 NHibernateに、SQLプロジェクションのマッピング方法に関する情報を提供する必要があります。

これがオプションの場合は、HQLまたはLinqToNHibernateを使用してください。

関連する問題