2009-06-07 4 views
12

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

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 : Parameter theCalID does not exist as a named parameter in [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']

ответ

9
"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 - это то, как вы используете именованные параметры даже в Native SQL Queries.

+0

Спасибо. что мне удалось пройти мимо одной проблемы, теперь я получаю System.InvalidCastException: невозможно сбрасывать объект типа «NHibernate.Impl.SqlQueryImpl» для ввода «System.Collections.Generic.List'1 [Kanpeki.Domain.CalEvent] ». – user17510

+0

Вы должны позвонить .List() в конце – gregmac

2

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

Смежные вопросы