Nhibernate 在相关实体中按属性排序

Nhibernate 在相关实体中按属性排序,nhibernate,fluent-nhibernate,sql-order-by,Nhibernate,Fluent Nhibernate,Sql Order By,我的数据库中有两个表: 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

我的数据库中有两个表:

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");
        }
    }
公共类ItemMap:ClassMap
{
公共项目映射()
{
表(“项目”);
Id(x=>x.Id)。列(“项目Id”);
映射(x=>x.Name).Column(“项目名称”);
引用(x=>x.ItemGroup.Column(“group_id”).Fetch.Join();
}
}
公共类ItemGroupMap:ClassMap
{
publicItemGroupMap()
{
表(“项目组”);
Id(x=>x.Id).列(“组Id”);
Map(x=>x.Name).Column(“group_Name”);
}
}


如何从数据库中按组名排序获取所有项目?


以防万一,我使用的是Fluent NHibernate v1.2.0.712。

在项目组中,您必须有一个项目列表,假设您将其称为项目

然后在ItemGroupMap中添加

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

现在,您可以拥有一个ItemGroup列表,其中包含按项目名称排序的所有子项。您只需在条件中添加一个联接即可

var criteria = Session.CreateCriteria<Item>()
                      .CreateAlias("ItemGroup", "group")
                      .AddOrder(Order.Asc("group.Name"));
var-criteria=Session.CreateCriteria()
.CreateAlias(“项目组”、“组”)
.AddOrder(Order.Asc(“group.Name”));

您使用的查询方法是Criteria、QueryOver、Linq还是HQL?@Vadim我使用Criteria获取所有项目,下面是我的代码示例:
使用(var session=SessionFactory.OpenSession()){return session.CreateCriteria(typeof(tenty)).AddOrder(CreateOrder(sortedBy,sortDirection)).SetFirstResult((pageIndex-1)*pageSize).SetMaxResults(pageSize).List();}
抱歉,忘记添加
私有静态订单CreateOrder(string sortedBy,string sortDirection){返回新订单(sortedBy,true);}
sortedBy是属性名称。这将获取按名称排序的组的所有项目。OP希望从数据库中获取按项目组名称排序的所有项目。