2011-04-29 1 views
1

У меня есть 2 таблицы в моей базе данных:Fluent NHibernate Сортировать по недвижимости в родственной Entity

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"); 
     } 
    } 



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

На всякий случай я использую Fluent NHibernate v1.2.0.712.

+0

В каком методе вы используете критерии, QueryOver, Linq или HQL? – Vadim

+0

@ Vadim Я использую критерии для получения всех элементов, вот пример моего кода: 'using (var session = SessionFactory.OpenSession()) { return session.CreateCriteria (typeof (TEntity)). AddOrder (CreateOrder (CreateOrder) sortedBy, sortDirection)). SetFirstResult ((pageIndex - 1) * pageSize) .SetMaxResults (pageSize) .List (); } ' –

+0

Извините, забыли добавить ' private static Order CreateOrder (строка sortedBy, строка sortDirection) { return new Order (sortedBy, true); } ' sortedBy - это название свойства. –

ответ

3

Вам просто нужно добавить присоединиться к вашим критериям.

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

спасибо, он работает. –

0

в вашем ItemGroup вы должны иметь список пункта, предположите, что вы называете его Items

Затем в ItemGroupMap добавить

mapping.HasMany(x => x.Items) 
      .Cascade.All() 
      .Inverse() 
      .SetAttribute("order-by", "item_name"); 

Теперь вы можете иметь список ItemGroup со всеми детьми заказанных ITEM_NAME

+0

Это позволит получить все элементы для группы, заказанной по имени. OP хочет, чтобы все элементы из db упорядочивались по имени группы элементов. – Vadim

Смежные вопросы