NHibernate Criteria从一对多关系排序(列表属性)

时间:2011-08-25 11:02:03

标签: nhibernate sorting criteria one-to-many

我有一个Effort实体和一个Schedule实体。 Schedule实体表示显示努力的页面。 每个努力都可以在每个时间表页面上单独订购。

因此,此案例的最佳数据库结构将如下所示

努力 - > ScheduleOrder(有位置)< - Schedule 所以一对多和多对一。

现在我需要在页面上按照NHibernate标准排序Efforts。

所以我需要使用类似于为每个Schedule返回Position的属性。 我可以通过使用带有自定义选择查询的数据库视图或属性来实现此目的。

任何人都知道如何以更好的方式从一对多关系中进行排序?

1 个答案:

答案 0 :(得分:0)

class ScheduleOrder
{
    public virtual Effort Effort { get; set; }
    public virtual Schedule Schedule { get; set; }
    public virtual int Position { get; set; }
}

var efforts = session.CreateCriteria<ScheduleOrder>()
    .Add(Expression.Eq("Schedule", schedule))
    .AddOrder(Order.Asc("Position"))
    .SetFetchMode("Effort", FetchMode.Eager)
    .List()
    .Select(so => so.Effort);

class Schedule
{
    // LIst has a position
    public virtual IList<Effort> Efforts { get; set; }
}

HasMany(x => x.Efforts)
    .AsList("position");
// or
HasManyToMany(x => x.Efforts)
    .AsList("position");


// schedule.Efforts have the right order