Я работаю над установкой NHibernate для проекта, и у меня есть несколько запросов, которые, из-за их сложности, мы будем оставлять как хранимые процедуры. Я хотел бы смочь использовать NHibernate для вызова sprocs, но столкнулся с ошибкой, которую я не могу выяснить. Так как я использую Быстрый NHibernate, я использую смешанный режим, отображающийся, как рекомендуется здесь. Однако, когда я запускаю приложение, я получаю "Именованный запрос, не известный: AccountsGetSingle" исключение и я не можем выяснить почему. Я думаю, что у меня могла бы быть проблема с моим HBM, отображающимся, так как я не очень знаком с использованием их, но я не уверен.
Мой код конфигурации NHibernate:
private ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString((conn => conn.FromConnectionStringWithKey("CIDB")))
.ShowSql())
.Mappings(m =>
{
m.HbmMappings.AddFromAssemblyOf();
m.FluentMappings.AddFromAssemblyOf();
})
.BuildSessionFactory();
}
Мой файл hbm.xml:
exec AccountsGetSingle
И код, где я называю sproc, похож на это:
public Account Get()
{
return _conversation.Session
.GetNamedQuery("AccountsGetSingle")
.UniqueResult();
}
Любые мысли или идеи ценились бы.Спасибо.
Обновление: предложение @kibbled_bits получает меня конечный результат, который я ищу (Способность назвать Хранимую процедуру от NHibernate), но я все еще не знаю, почему подход, который я упомянул выше, не работает. Мне все еще любопытно относительно почему, так как это могло бы обеспечить ценное понимание будущих проблем.
Когда у меня есть для использования хранимых процедур (что происходит только тогда, когда я вынужден). Я предпочитаю использовать следующий метод для их выполнения:
var list = Session.CreateSQLQuery("exec GetCustomerByNaturalKey ?, ?")
.AddEntity(typeof(Customer))
.SetInt32(0, customerNo)
.SetDateTime(1, createdDate)
.List<Customer>();
Первый параметр .SetInt32 / DateTime - это просто порядковый номер параметра.
Я получил такое же сообщение об ошибке, и для меня это решилось тем, что свойство моего hbm.xml файла "Build action" было установлено на "Embedded Resource", так что вы можете попробовать еще раз.