2009-06-07 11 views
12

He intentado hacer funcionar la siguiente consulta durante unas horas y me estoy quedando sin ideas. ¿Alguien puede ver dónde me estoy equivocando? Cualquier puntero muy apreciado.Devuelve una lista de objetos tipeados a través de CreateSQLQuery en 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); 

Error:

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

Respuesta

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

debería ser

"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' debe ser escrita como =: theCalId; : theCalId es cómo se usan los parámetros con nombre incluso en las consultas SQL nativas.

+0

Gracias. que me hizo pasar un problema ahora estoy recibiendo System.InvalidCastException: no se puede convertir el objeto del tipo 'NHibernate.Impl.SqlQueryImpl' para escribir 'System.Collections.Generic.List'1 [Kanpeki.Domain.CalEvent] '. – user17510

+0

Debería estar llamando .List() al final – gregmac

2

Debe eliminar la llamada query.ExecuteUpdate(). Hacer el query.List() es suficiente para emitir la consulta en la sesión y devolver el conjunto de resultados.