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

发布于 2024-12-01 08:59:19 字数 318 浏览 0 评论 0原文

我有一个工作量实体和一个计划实体。 计划实体代表显示工作量的页面。 每个工作可以在每个计划页面上有一个单独的订单。

因此,对于这种情况,最佳的数据库结构将如下所示:

Effort -> ScheduleOrder(withposition) <- Schedule 所以一对多和多对一。

现在我需要使用 NHibernate 标准对页面上的工作量进行排序。

所以我需要使用类似属性的东西来返回每个时间表的位置。 我可以通过使用带有自定义选择查询的数据库视图或属性来实现此目的。

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

I have an Effort entity and a Schedule entity.
The Schedule entity represents the page on wich Efforts are displayed.
Each Effort can have a separate Order on each Schedule page.

So the best DB structure for this case would look like this

Effort -> ScheduleOrder(with position) <- Schedule
so the one-to-many and many-to-one.

Now I need to sort Efforts on page usig NHibernate criteria.

So I need to use something like property that returns Position for each Schedule.
I can acheave this by using DB View or Property with customised Select query.

Anyone has an idea how to do sorting from one-to-many relationship in a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

咋地 2024-12-08 08:59:19

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

with

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

or with

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文