1

我正在使用 NHibernate 3.1 和 SQL CE 4(使用 MsSqlCe40Dialect)。使用 Linq 生成查询。

如果我使用 String.Contains、String.StartsWith 或 String.EndsWith,则会产生无效的 SQL。

例如:

Session.Query<User>.Where(user => user.Name.Contains("Joe"))

生成如下 SQL:

SELECT Name FROM User WHERE (User.Name like ('%'||@p0||'%'))

这从实际生成的 SQL 中有所简化,但问题在于额外的'||...||'

我预计这是 SQL CE 方言的问题,但我不确定从这里去哪里。有关修复/解决方法的任何想法?

4

1 回答 1

1

看起来这在 3.1 版本发布后不久(在此提交中)已修复。不幸的是,由于其他依赖项,我无法升级 NHibernate。与此同时,我通过MsSqlCe40Dialect使用以下代码进行子类化解决了这个问题:

using NHibernate;
using NHibernate.Dialect;
using NHibernate.Dialect.Function;

namespace DataAccess
{
    public class CustomMsSqlCe40Dialect : MsSqlCe40Dialect
    {
        public CustomMsSqlCe40Dialect ()
        {
            RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")"));
        }
    }
}
于 2012-05-10T16:33:44.450 回答