2011-04-22 15 views
8

que tratar de hacer una combinación y me siguen dando este errorSe espera la ruta para unirse! Error nhibernate

tendencia prevista para unirse! [SELECT t.CourseId DE tareas como t INNER JOIN cursos como c, CoursePermissions como cp DONDE (t.CourseId = 1)]

que tienen

const string query = "SELECT t.CourseId FROM Task as t INNER JOIN Courses as c, CoursePermissions as cp WHERE (t.CourseId = 1)"; 

var a = session.CreateQuery(query); 

My SQL que estoy tratando para lograr

SELECT  dbo.Tasks.CourseId 
FROM   dbo.Tasks INNER JOIN 
         dbo.Courses ON dbo.Tasks.CourseId = dbo.Courses.CourseId INNER JOIN 
         dbo.CoursePermissions ON dbo.Courses.CourseId = dbo.CoursePermissions.CourseId 
WHERE  (dbo.Tasks.CourseId = 1) 

estoy usando NHibernate 3.1 y 1.2 nhibernate fluidez

Respuesta

14

Significa que el uso de una combinación interna en HQL funciona de una manera un poco diferente a usarlo en SQL. En HQL se une a las tablas al proporcionar la "ruta", que es básicamente la propiedad referenciada de su clase.

Así que en lugar de

SELECT t.CourseId FROM Task as t INNER JOIN Courses as c ... 

que necesita para escribir

// c.Taks is the IList property in your Courses class 
SELECT t.CourseId FROM Courses as c INNER JOIN c.Tasks as t ... 
+0

¿funciona esto si no tiene una clave externa en la tabla de tareas? – iKode

+0

funciona fuera de sus asignaciones –

0

Aunque Florian Lim ha sugerido una gran solución, pero en mi caso no tenía IList para tareas en cursos. Logré que a través de Theta-Style Joins que en realidad es Cartesian product proporcionar todas las combinaciones posibles que se pueden filtrar (en la cláusula where) según las necesidades.

Cuestiones relacionadas