我正在创建一个新的 NHibernate 方言以通过 ODBC 与 OpenEdge 10.2a 数据库一起使用。我一直在使用 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 上工作?