Ожидаемый путь для присоединения!Ошибка Nhibernate - PullRequest
9 голосов
/ 23 апреля 2011

Я пытаюсь выполнить соединение, и я получаю эту ошибку

Ожидается путь для объединения![ВЫБРАТЬ t.CourseId ИЗ ЗАДАНИЯ как t ВНУТРЕННЕЕ СОЕДИНЕНИЕ Курсы как c, CoursePermissions как cp WHERE (t.CourseId = 1)]

У меня есть

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 Iя пытаюсь достичь

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)

Я использую nhibernate 3.1 и свободно nhibernate 1.2

Ответы [ 2 ]

16 голосов
/ 23 апреля 2011

Это означает, что использование внутреннего соединения в HQL работает немного иначе, чем использование его в SQL.В HQL вы объединяете таблицы, предоставляя «путь», который в основном является ссылочным свойством вашего класса.

Так что вместо

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

вам нужно написать

// c.Taks is the IList property in your Courses class
SELECT t.CourseId FROM Courses as c INNER JOIN c.Tasks as t ...
0 голосов
/ 10 мая 2015

Хотя Флориан Лим предложил отличное решение, но в моем случае у меня не было IList для задач в курсах. Я достиг этого, благодаря соединениям в тета-стиле , которые фактически декартовы произведения , предоставляют все возможные комбинации, которые могут быть отфильтрованы (в предложении where) в соответствии с потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...