Estoy trabajando en la configuración de NHibernate para un proyecto y tengo algunas consultas que, debido a su complejidad, dejaremos como procedimientos almacenados. Me gustaría poder usar NHibernate para llamar a los sprocs, pero me he encontrado con un error que no logro resolver. Como estoy usando Fluiber NHibernate, estoy usando la asignación de modo mixto como se recomienda here. Sin embargo, cuando ejecuto la aplicación recibo una excepción de "consulta no conocida conocida: AccountsGetSingle" y no puedo entender por qué. Creo que podría tener un problema con mi mapeo HBM ya que no estoy muy familiarizado con su uso, pero no estoy seguro.Llamada con nombre error no conocido al intentar llamar a un proceso almacenado utilizando Fluent NHibernate
Mi NHibernate código de configuración es:
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();
}
Mi archivo hbm.xml es:
<?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>
Y el código donde yo estoy llamando a la sproc se ve así:
public Account Get()
{
return _conversation.Session
.GetNamedQuery("AccountsGetSingle")
.UniqueResult<Account>();
}
Cualquier pensamiento o idea sería apreciada. Gracias.
Actualización: @ sugerencia de kibbled_bits me conseguir el resultado final que estoy buscando (Ser capaz de llamar a un procedimiento almacenado de NHibernate), pero todavía no sé por qué el enfoque que he mencionado anteriormente doesn' t trabajo. Todavía tengo curiosidad de por qué, ya que podría proporcionar información valiosa sobre problemas futuros.
No creo que supiera que podría llamar a un sproc usando .CreateSQLQuery(), aunque tiene mucho sentido. Le daré una oportunidad cuando llegue a trabajar por la mañana. – Hamman359
Esto funcionó perfectamente. Pude llamar con éxito mi procedimiento almacenado sin ningún problema. Gracias. – Hamman359
+1 salsa increíble.Otras respuestas implican mapear un fragmento de hbm. Esto es mucho mejor. –