Sto lavorando alla configurazione di NHibernate per un progetto e ho alcune query che, a causa della loro complessità, lasceremo le stored procedure. Mi piacerebbe essere in grado di utilizzare NHibernate per chiamare gli sproc, ma ho incontrato un errore che non riesco a capire. Dal momento che sto usando Fluent NHibernate sto usando la modalità mista come raccomandato here. Tuttavia, quando eseguo l'app, ottengo un'eccezione "Notazione denominata non nota: AccountsGetSingle" e non riesco a capire perché. Penso che potrei avere un problema con la mia mappatura HBM poiché non ho molta familiarità con il loro utilizzo ma non ne sono sicuro.Errore noto con nome di query che tenta di chiamare un processo memorizzato utilizzando Fluent NHibernate
mio NHibernate codice di configurazione è:
private ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString((conn => conn.FromConnectionStringWithKey("CIDB")))
.ShowSql())
.Mappings(m =>
{
m.HbmMappings.AddFromAssemblyOf<Account>();
m.FluentMappings.AddFromAssemblyOf<Account>();
})
.BuildSessionFactory();
}
Il mio file hbm.xml è:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<sql-query name="AccountsGetSingle">
<return alias="Account" class="Core, Account"></return>
exec AccountsGetSingle
</sql-query>
</hibernate-mapping>
E il codice dove sto chiamando lo sproc assomiglia a questo:
public Account Get()
{
return _conversation.Session
.GetNamedQuery("AccountsGetSingle")
.UniqueResult<Account>();
}
Qualsiasi pensiero o idea sarebbe apprezzato. Grazie.
Aggiornamento: @ suggerimento di kibbled_bits me ottenere il risultato finale che sto cercando (Essere in grado di chiamare una stored procedure da NHibernate), ma ancora non so perché l'approccio che ho elencato sopra doesn' lavoro. Sono ancora curioso di sapere perché, poiché potrebbe fornire informazioni preziose sui problemi futuri.
Non penso di sapere che è possibile chiamare uno sproc utilizzando .CreateSQLQuery(), anche se ha perfettamente senso. Gli darò una possibilità quando sarò al lavoro al mattino. – Hamman359
Questo ha funzionato perfettamente. Sono stato in grado di chiamare correttamente la mia stored procedure senza problemi. Grazie. – Hamman359
+1 salsa fantastica.Altre risposte implicano la mappatura di uno snippet hbm. Questo è molto meglio. –