Свободное внутреннее соединение Nhibernate - PullRequest
3 голосов
/ 27 октября 2011

У меня 3 таблицы (Master, Imagen, Linea) были:

Master
public virtual int Id { get; private set; }
public virtual Imagen imagen { get; set; }

Imagen
public virtual int Id { get; private set; }
public virtual Linea linea { get; set; }

Linea
public virtual int Id { get; private set; }
public virtual String Nombre { get; set; }

Мне нужен запрос, подобный этому:

SELECT * FROM dbo.Master 
INNER JOIN dbo.Imagen ON dbo.Master.imagen_id = dbo.Imagen.Id 
INNER JOIN dbo.Linea ON dbo.Imagen.linea_id = dbo.Linea.Id 
WHERE dbo.Linea_Id = 5

Но я не знаю, как сказать Fluent Nhibernate для создания этого запроса с помощью автоматического обработчика. До сих пор я пробовал это:

ICriteria c = session.CreateCriteria(typeof(Master))
  .CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin)
  .Add(Restrictions.Eq("img.linea_id", id_linea));

return c.List<Master>();

Но я получаю эту ошибку: не удалось разрешить свойство: dbo из: ImageManager.Model.Entity.Master

Есть идеи, как сделать Inner Join? Заранее спасибо

Ответы [ 2 ]

8 голосов
/ 27 октября 2011

Для начала я бы избавился от dbo от dbo.Imagen. Используя интерфейс ICriteria, вы должны мыслить в терминах объектов, а не таблиц базы данных, даже если может быть однозначное отображение объекта в таблицу и свойств в столбцы.

EDIT:
другой вариант - использовать синтаксис QueryOver Lambda.

   var list = session.QueryOver<Master>()
                        .JoinQueryOver(master => master.imagen)
                        .Where(imagen => imagen.linea.Id == 5)
                        .List();
3 голосов
/ 27 октября 2011

Я не могу работать с вашими предыдущими комментариями, если вы уже исправили это, но я бы попробовал

ICriteria c = session.CreateCriteria(typeof(Master))

.CreateAlias("imagen", "img", JoinType.InnerJoin)
.CreateAlias("img.linea", "lin", JoinType.InnerJoin)
.Add(Restrictions.Eq("lin.Id", 5));

return c.List<Master>();

РЕДАКТИРОВАТЬ: Кожух изменился, как указано ниже.

...