Desidero poter chiamare una funzione personalizzata denominata "recent_date" come parte del mio HQL. In questo modo: [Date] >= recent_date()
Funzione SQL personalizzata per il dialetto NHibernate
Ho creato un nuovo dialetto, ereditato da MsSql2000Dialect e specificato il dialetto per la mia configurazione.
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();
Quando si chiama recent_date()
ottengo il seguente errore: System.Data.SqlClient.SqlException: 'recent_date' non è un nome di funzione riconosciuta
lo sto usando in un comunicato dove per una mappatura HasMany come sotto.
HasMany(x => x.RecentValues)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.SaveUpdate()
.Where("Date >= recent_date()");
Cosa mi manca qui?
Siamo spiacenti, a tale proposito. Avrei dovuto chiarire che "SELECT .... FROM SomeTable WHERE ...." era solo un esempio. Non usiamo quella parte nel nostro codice. –
Le risposte dicono che il .Where nel tuo mapping si aspetta che l'SQL puro non abbia alcuna forma di HQL. – Rashack