自定義SQL函數我希望能夠調用名爲「recent_date」自定義函數作爲我的HQL的一部分。就像這樣:[Date] >= recent_date()
NHibernate的方言
我創建了一個新的方言,從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();
當調用recent_date()
我得到以下錯誤: System.Data.SqlClient.SqlException:「recent_date」不是可以識別的函數名
我使用它在一個地方語句HasMany映射如下。
HasMany(x => x.RecentValues)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.SaveUpdate()
.Where("Date >= recent_date()");
我在這裏錯過了什麼?
對不起,有關。我應該明確指出「SELECT .... FROM SomeTable WHERE ....」只是一個例子。我們不在代碼中使用該部分。 – 2009-12-04 11:16:10
答案表明。映射中的任何地方都期望純SQL而不是任何形式的HQL。 – Rashack 2010-11-01 12:45:17