首页 文章

流利的NHibernate按相关实体中的属性排序

提问于
浏览
1

我的数据库中有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");
        }
    }

How can I get all items from the database ordered by group name?

以防我使用Fluent NHibernate v1.2.0.712 .

2 回答

  • 0

    您只需要在条件中添加联接 .

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

    在你的ItemGroup中你必须有一个Item列表,假设你称之为Items

    然后在ItemGroupMap中添加

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

    现在,您可以拥有一个ItemGroup列表,其中包含按item_name排序的所有子项

相关问题