Nhibernate通过懒惰的装载袋命令寻呼

本文关键字:命令 Nhibernate | 更新日期: 2023-09-27 18:35:34

我有以下映射:

<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) 实体与实体动物名称列表(老虎)2) 实体与实体动物名称列表(猫、狗)然后,我想先得到第二个实体(因为猫的"c"比老虎的"t"低),然后是第一个实体。

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

提前感谢,话筒。

附言 - 我正在使用标准。

Nhibernate通过懒惰的装载袋命令寻呼

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