2009-06-07 6 views
12

J'ai essayé d'obtenir la requête suivante de travail pour quelques heures maintenant et je suis à court d'idées. Quelqu'un peut-il repérer où je vais mal. Des pointeurs très appréciés.Renvoyer une liste d'objets typés via CreateSQLQuery dans 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); 

Erreur:

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

Répondre

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

devrait être

"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' doit être écrit comme =: theCalId; : theCalId est la façon dont vous utilisez les paramètres nommés même dans les requêtes SQL natives.

+0

Merci. cela m'a fait passé un problème maintenant je reçois System.InvalidCastException: Impossible de transformer l'objet de type 'NHibernate.Impl.SqlQueryImpl' pour taper 'System.Collections.Generic.List'1 [Kanpeki.Domain.CalEvent] '. – user17510

+0

Vous devriez appeler .List() à la fin – gregmac

2

Vous devez supprimer l'appel query.ExecuteUpdate(). Il suffit de query.List() pour émettre la requête sur la session et renvoyer le jeu de résultats.

Questions connexes