2009-06-07 60 views
12

一直試圖讓下面的查詢現在工作幾個小時,並且正在用盡想法。任何人都可以發現我要出錯的地方嗎?任何指針非常讚賞。通過NHibernate中的CreateSQLQuery返回一個類型化對象的列表

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是即使在本機SQL查詢中也使用命名參數的方式。

+0

謝謝。這讓我通過一個問題,現在我越來越 System.InvalidCastException:無法強制類型'NHibernate.Impl.SqlQueryImpl'類型的對象類型'System.Collections.Generic.List`1 [Kanpeki.Domain.CalEvent] 」。 – user17510 2009-06-07 13:44:03

2

您應該刪除query.ExecuteUpdate()呼叫。 執行query.List()就足以在會話上發出查詢並返回結果集。

相關問題