【问题标题】:Nhibernate ordered paging by a lazy loading bagNhibernate 通过延迟加载包进行排序分页
【发布时间】:2014-12-27 01:37:06
【问题描述】:

我有以下映射:

<class name="Entity, Namespace.MyDomain" table="Entity" lazy="false" mutable="false" >
<id name="EntityId" column="ENTITY_ID"> <generator  class="native"/> </id>

<bag name="EntityList" inverse="true" lazy="true" cascade="all-delete-orphan">
       <key column="ENTITY_ID"/>
       <one-to-many class="Namespace.Entity.EntityList, Namespace.MyDomain"/>
</bag>

现在,我想通过我的 EntityList.Name 获得有序分页。
例如,如果我有 2 个实体: 1) EntityList 为动物名称的实体(老虎) 2) EntityList 为动物名称(猫、狗)的实体 然后,我想先得到第二个实体(因为 cat 的 'c' 比 Tiger 的 't' 低),然后是第一个。

当然,它会影响我的分页,因为如果我通过 entity.id 获取分页,但当我通过 entitylist.names 获取它时,可能会在第一页显示带有老虎的实体,它可能会显示在其他页面上。

提前致谢, 迈克。

附言- 我正在使用标准。

【问题讨论】:

  • 为什么你的内包需要懒加载?根据您的要求,它将始终被访问。

标签: c# sql nhibernate lazy-loading nhibernate-mapping


【解决方案1】:
var entityIds = session.CreateCriteria<Entity>()
    .CreateAlias("EntityList", "el")
    .AddOrder(Order.Asc("el.Name"))
    .SetProjection(Projections.Id)
    .List<int>();

var entities = session.CreateCriteria<Entity>()
    .Add(Expression.In(Projections.Id, entityIds))
    .SetFetchMode("EntityList", FetchMode.Eager)
    .List<Entity>();

// resort again
return entityIds.Select(id => entities.First(e => e.Id == id)).ToList();

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2013-12-10
    • 2011-10-17
    相关资源
    最近更新 更多