Ich möchte in der Lage sein, eine benutzerdefinierte Funktion namens "recent_date" als Teil meiner HQL aufrufen. So: [Date] >= recent_date()
Benutzerdefinierte SQL-Funktion für NHibernate Dialekt
Ich habe einen neuen Dialekt erstellt, der von MsSql2000Dialect erbte und den Dialekt für meine Konfiguration festlegte.
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();
Beim Aufruf recent_date()
ich die folgende Fehlermeldung erhalten: System.Data.SqlClient.SqlException: ‚recent_date‘ ist nicht eine anerkannte Funktionsnamen
ich es in einer Erklärung, wo bin mit für ein HasMany-Mapping wie unten.
HasMany(x => x.RecentValues)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.SaveUpdate()
.Where("Date >= recent_date()");
Was fehlt mir hier?
Leider namens, darüber. Ich hätte klarstellen sollen, dass "SELECT .... FROM SomeTable WHERE ...." nur ein Beispiel war. Wir verwenden diesen Teil nicht in unserem Code. –
Die Antworten sagen, dass die .Where in Ihrem Mapping reine SQL keine Form von HQL erwartet. – Rashack