ODBC 経由で OpenEdge 10.2a データベースと連携する新しい NHibernate ダイアレクトを作成しています。NHibernate 2.1 で方言を問題なく使用していますが、NHibernate 3.3.1 に移植するときに、生成されたクエリの Like ステートメントに問題があります。
NHibernate 3.3.1 で方言を使用すると、startswith("sometest") を使用した linq クエリに対して次のようなステートメントが生成されます。
select test from tests
where testname like (?||'%');
p0 = 'sometest' [Type: String (8)]
これは NHibernate 2.1 から変更されており、OpenEdge データベースはこれをサポートしていません。NHibernate 2.1 の同じクエリは次のようになります。
select test from tests
where testname like ?;
p0 = 'sometest%'
MsSql2005Dialect を使用してみました。これにより、生成された SQL が次のように少し変更されます。
select test from tests
where testname like (?+'%');
p0 = 'sometest' [Type: String (8)]
プラスになったパイプに注目してください。
これらの変更の原因は何ですか? また、NH 3.3.1 で方言を動作させるにはどうすれば変更できますか?