2

有没有办法加载 NHibernate 实体,在子集合上有一个子句?我有一个场景,我在“操作”中记录更改,即一个操作可以包含对多个实体的更改。当我想加载特定实体的日志时,我会加载对该实体所做的任何更改的所有操作。加载这些操作会导致加载所有更改 - 我只希望加载相关更改。

课程:

public class Operation{
   public virtual DateTime TimeStamp { get; set; }
   public virtual IList<Change> Changes { get; private set; }
}

public class Change{
    public virtual string ChangeText { get; set; }
    public virtual int EntityId { get; set; }
} 

获取给定实体的操作

 Session.QueryOver<Operation>().Where(o => o.Changes.Any(c => c.EntityId == entityId));
4

1 回答 1

0

I. 正如 Oskar Berggren 的回答所述:https ://stackoverflow.com/a/13864061/1679310 您可以应用过滤器18.1。NHibernate 过滤器

概括:

调整映射

<set ...>
    <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>

然后这样称呼它:

ISession session = ...;
session.EnableFilter("myFilter").SetParameter("myFilterParam", "some-value");
IList results = Session.QueryOver<Operation>()
  .Where(...
  .List();

二、Changes其他选项是在查询时过滤Operation16.4。协会

IQueryOver<Operation,Change> query =
 session.QueryOver<Operation>()
   .JoinQueryOver<Change>(o => o.Changes) // added explicit <Change>
     .Where(c => c.EntityId == entityId);
于 2013-01-17T11:39:24.400 回答