Chcę móc wywoływać niestandardową funkcję o nazwie "recent_date" jako część mojego HQL. W ten sposób: [Date] >= recent_date()
Niestandardowa funkcja SQL dla dialektu NHibernate
Stworzyłem nowy dialekt, dziedzicząc z MsSql2000Dialect i określając dialekt dla mojej konfiguracji.
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();
Dzwoniąc recent_date()
pojawia się następujący błąd: System.Data.SqlClient.SqlException: „recent_date” nie jest rozpoznawany nazwę funkcji
używam go w WHERE dla mapowanie HasMany jak poniżej.
HasMany(x => x.RecentValues)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.SaveUpdate()
.Where("Date >= recent_date()");
Czego mi tu brakuje?
Niestety, o tym. Powinienem był wyraźnie powiedzieć, że "SELECT .... From SomeTable WHERE ...." był tylko przykładem. Nie używamy tej części w naszym kodzie. –
Odpowiedzi mówią, że. Gdzie w twoim mapowaniu oczekuje się, że czysty SQL nie będzie jakąkolwiek formą HQL. – Rashack