Свободный порядок NHibernate по свойству в связанном объекте с использованием QueryOver - PullRequest
3 голосов
/ 02 мая 2011

У меня есть элементы и таблицы групп элементов в моей базе данных:

CREATE TABLE [items](
    [item_id] [int] IDENTITY(1,1) NOT NULL,
    [item_name] [varchar](50) NOT NULL,
    [group_id] [int] NOT NULL   
)

CREATE TABLE [itemgroup](
    [group_id] [int] IDENTITY(1,1) NOT NULL,
    [group_name] [varchar](50) NULL 
)

, и вот классы отображения для этих объектов:

public class ItemMap : ClassMap<Item>
{
    public ItemMap()
    {
        Table("items");
        Id(x => x.Id).Column("item_id");
        Map(x => x.Name).Column("item_name");
        References(x => x.ItemGroup).Column("group_id").Fetch.Join();            
    }
}
public class ItemGroupMap : ClassMap<ItemGroup>
{
    public ItemGroupMap()
    {
        Table("itemgroup");
        Id(x => x.Id).Column("group_id");
        Map(x => x.Name).Column("group_name");
    }
}

Как получить все элементы избаза данных упорядочена по имени группы с использованием QueryOver?

Я знаю, как это сделать, используя критерии (используя псевдоним).

var criteria = Session.CreateCriteria<Item>()
                      .CreateAlias("ItemGroup", "group")
                      .AddOrder(Order.Asc("group.Name"));

Я пытался создать псевдоним ItemGroup и использовать его с QueryOver, но мой результат был отсортирован по имени элемента, а не по имени группы элементов.

1 Ответ

4 голосов
/ 02 мая 2011

Это будет выглядеть примерно так:

Item itemAlias = null;
ItemGroup itemGroupAlias = null; 

session.QueryOver<Item>(() => itemAlias)
    .JoinAlias(() => itemAlias.ItemGroup, () => itemGroupAlias)
    .OrderBy(() => itemGroupAlias.Name).Asc;
...