我正试图在此NHibernate查询上急切地获取Action
和Roles
menuItems = UnitOfWork.CurrentSession
.QueryOver<TopMenuItem>()
.JoinAlias(i => i.Action, () => ua)
.JoinAlias(() => ua.Roles, () => ro)
.List();
我看到该查询通过内部联接返回所有必要的数据,但是稍后我访问Roles
时,会执行一个新的查询来获取该集合。
OTOH,这个查询很完美,但我想避免使用HQL
menuItems = UnitOfWork.CurrentSession
.CreateQuery(@"
from TopMenuItem i
join fetch i.Action a
join fetch a.Roles"
)
.List<TopMenuItem>();
答案 0 :(得分:2)
你的联盟需要被正确加载LeftOuterJoins。
menuItems = UnitOfWork.CurrentSession
.QueryOver<TopMenuItem>()
.JoinAlias(i => i.Action, () => ua, JoinType.LeftOuterJoin)
.JoinAlias(() => ua.Roles, () => ro, JoinType.LeftOuterJoin)
.List();