Возврат списка типизированных объектов через CreateSQLQuery в NHibernate - PullRequest
12 голосов
/ 07 июня 2009

Пытался заставить следующий запрос работать в течение нескольких часов, и у меня заканчиваются идеи. Может кто-нибудь определить, где я иду не так. Любые указатели высоко ценится.

CalEvents = (List<CalEvent>)session.CreateSQLQuery(@"
    SELECT *
    FROM dbo.tb_calendar_calEvents
    INNER JOIN dbo.tb_calEvents
      ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id)
    WHERE dbo.tb_calendar_calEvents.calendarID = 'theCalID'"
)
.AddEntity(typeof(CalEvent))
.SetInt64("theCalID", cal.id);

Ошибка:

Kanpeki.NUnit.CalUserTest.Should_return_logged_in_user: System.ArgumentException: параметр theCalID не существует как именованный параметр в [SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) ГДЕ dbo.tb_calendar_calEvents.calendarID = 'TheCalID']

Ответы [ 2 ]

9 голосов
/ 07 июня 2009
"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = 'theCalID'"

должно быть

"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = :theCalID"

= 'theCalID' должен быть записан как =: theCalId; : theCalId - это способ использования именованных параметров даже в собственных запросах SQL.

2 голосов
/ 06 августа 2009

Вы должны удалить звонок query.ExecuteUpdate(). Выполнения query.List() достаточно, чтобы выполнить запрос в сеансе и вернуть набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...