pracuję nad konfigurowania NHibernate dla projektu i mam kilka pytań, które, ze względu na ich złożoność, będziemy pozostawiając jako procedur przechowywanych. Chciałbym móc użyć NHibernate do wywoływania sprocsów, ale napotkałem błąd, którego nie mogę zrozumieć. Ponieważ używam Fluent NHibernate używam mapowania w trybie mieszanym zgodnie z zaleceniami here. Jednak po uruchomieniu aplikacji otrzymuję wyjątek "nieznany nieznany kwerenda: AccountsGetSingle" i nie mogę zrozumieć, dlaczego. Myślę, że mógłbym mieć problem z mapowaniem HBM, ponieważ nie jestem bardzo obeznany z ich używaniem, ale nie jestem pewien.Nazwany kwerendy nie znany błąd próbując wywołać przechowywanej proc użyciu Fluent NHibernate
My NHibernate kod konfiguracji:
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();
}
Mój plik hbm.xml jest:
<?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>
I kod gdzie jestem wywołanie sproc wygląda następująco:
public Account Get()
{
return _conversation.Session
.GetNamedQuery("AccountsGetSingle")
.UniqueResult<Account>();
}
Wszelkie przemyślenia i pomysły będą mile widziane. Dzięki.
Aktualizacja: @ sugestią kibbled_bits Get mi wynik końcowy, który szukam (Być zdolnym do wywołania procedury przechowywanej z NHibernate), ale nadal nie wiem, dlaczego podejście mam wymienione powyżej nie robi” t działa. Wciąż jestem ciekawy dlaczego, ponieważ może to dostarczyć cennego wglądu w przyszłe problemy.
Nie sądzę, wiedziałem, że można nazwać sproc korzystając .CreateSQLQuery(), chociaż to ma sens. Zrobię zastrzyk, kiedy rano zabiorę się do pracy. – Hamman359
To działało idealnie. Udało mi się pomyślnie wywołać procedurę przechowywaną bez żadnych problemów. Dzięki. – Hamman359
+1 niesamowity sos.Inne odpowiedzi obejmują odwzorowanie fragmentu hbm. To jest dużo lepsze. –