NHibernate加载实体与子集合的一部分

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

类别:

public class Operation{ public virtual DateTime TimeStamp { get; set; } public virtual IList Changes { get; private set; } } public class Change{ public virtual string ChangeText { get; set; } public virtual int EntityId { get; set; } } 

获取给定实体的操作

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

I.如本Oskar Berggren的回答所述: https : //stackoverflow.com/a/13864061/1679310您可以应用filter18.1。 NHibernatefilter

摘要:

调整您的映射

    

然后这样称呼它:

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

II。 其他选项是在查询Operation时过滤Changes : 16.4。 协会

 IQueryOver query = session.QueryOver() .JoinQueryOver(o => o.Changes) // added explicit  .Where(c => c.EntityId == entityId);