2009-06-07 2 views
12

Sie haben versucht, die folgende Abfrage jetzt für ein paar Stunden zu arbeiten, und ich habe keine Ideen mehr. Kann mir jemand auffallen, wo ich falsch liege? Alle Hinweise sehr geschätzt.Geben Sie eine Liste von typisierten Objekten über CreateSQLQuery in NHibernate zurück

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); 

Fehler:

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']

Antwort

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'" 

sollte

"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" 

= sein 'theCalID' as = geschrieben werden sollte: theCalId; : theCalId verwendet benannte Parameter auch in Native-SQL-Abfragen.

+0

Danke. Das hat mich hinter ein Problem gebracht Jetzt bekomme ich System.InvalidCastException: Kann Objekt des Typs 'NHibernate.Impl.SqlQueryImpl' nicht umwandeln, um 'System.Collections.Generic.List'1 [Kanpeki.Domain.CalEvent] einzugeben ". – user17510

+0

Sie sollten am Ende .List() aufrufen – gregmac

2

Sie sollten den Anruf query.ExecuteUpdate() entfernen. Doing die query.List() ist genug, um die Abfrage für die Sitzung ausgeben und die Ergebnismenge zurückgeben.

Verwandte Themen