在NHibernate中通过CreateSQLQuery返回一个类型化对象列表

use*_*510 12 sql 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);
Run Code Online (Sandbox Code Playgroud)

错误:

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)WHERE dbo .tb_calendar_calEvents.calendarID ='theCalID']

Pra*_*yan 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'"
Run Code Online (Sandbox Code Playgroud)

应该

"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"
Run Code Online (Sandbox Code Playgroud)

='theCalID'应写为=:theCalId; :theCalId即使在Native SQL查询中也使用命名参数.