NHibernate方言的自定义SQL函数

Kri*_*Ahl 5 nhibernate hql fluent-nhibernate

我希望能够将一个名为"recent_date"的自定义函数作为我的HQL的一部分.像这样:[Date] >= recent_date()

我创建了一个新的方言,继承自MsSql2000Dialect并为我的配置指定了方言.

public class NordicMsSql2000Dialect : MsSql2000Dialect
{
    public NordicMsSql2000Dialect()
    {
        RegisterFunction(
            "recent_date",
            new SQLFunctionTemplate(
                NHibernateUtil.Date,
                "dateadd(day, -15, getdate())"
                )
            );
    }
}

var configuration = Fluently.Configure()
.Database(
    MsSqlConfiguration.MsSql2000
    .ConnectionString(c => .... )
    .Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>())
    .Dialect<NordicMsSql2000Dialect>()
)
.Mappings(m => ....)
.BuildConfiguration();
Run Code Online (Sandbox Code Playgroud)

调用时recent_date()我得到以下错误: System.Data.SqlClient.SqlException:'recent_date'不是可识别的函数名称

我正在使用where语句中的HasMany映射,如下所示.

HasMany(x => x.RecentValues)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.SaveUpdate()
    .Where("Date >= recent_date()");
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Ste*_*ger 3

我认为,Where是SQL语句,而不是HQL语句。所以它不知道这个功能。它仅适用于 HQL、查询或过滤器。