有没有办法加载一个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));
答案 0 :(得分:0)
予。正如Oskar Berggren的回答所述:https://stackoverflow.com/a/13864061/1679310 您可以应用过滤器18.1. NHibernate filters
要点:
调整您的映射
<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();
II。其他选项是在查询Changes
:16.4. Associations
Operation
IQueryOver<Operation,Change> query =
session.QueryOver<Operation>()
.JoinQueryOver<Change>(o => o.Changes) // added explicit <Change>
.Where(c => c.EntityId == entityId);