#nhibernate #fluent-nhibernate #sql-order-by
#nhibernate #свободный-nhibernate #sql-order-by
Вопрос:
В моей базе данных есть 2 таблицы:
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");
}
}
Как я могу получить все элементы из базы данных, упорядоченные по имени группы?
На всякий случай я использую свободный NHibernate версии v1.2.0.712.
Комментарии:
1. Какой метод запроса вы используете Criteria, QueryOver, Linq или HQL?
2. @Vadim Я использую критерии для получения всех элементов, вот пример моего кода:
using (var session = SessionFactory.OpenSession()) { return session.CreateCriteria(typeof(TEntity)).AddOrder(CreateOrder(sortedBy, sortDirection)).SetFirstResult((pageIndex - 1) * pageSize).SetMaxResults(pageSize).List<TEntity>(); }
3. Извините, забыл добавить
private static Order CreateOrder(string sortedBy, string sortDirection) { return new Order(sortedBy, true); }
sortedBy — это имя свойства.
Ответ №1:
Вам просто нужно добавить объединение к вашим критериям.
var criteria = Session.CreateCriteria<Item>()
.CreateAlias("ItemGroup", "group")
.AddOrder(Order.Asc("group.Name"));
Ответ №2:
в вашей ItemGroup у вас должен быть список элементов, предположим, вы называете это Items
Затем в ItemGroupMap добавьте
mapping.HasMany(x => x.Items)
.Cascade.All()
.Inverse()
.SetAttribute("order-by", "item_name");
Теперь у вас может быть список ItemGroup со всеми дочерними элементами, упорядоченными по item_name
Комментарии:
1. При этом будут получены все элементы для группы, упорядоченные по имени. OP хочет, чтобы все элементы из базы данных были упорядочены по имени группы элементов.