我有一个与Project
对象的架构。每个项目都有一个拥有者,以及一个额外的SharePermission
对象集合,详细说明也可以访问该项目的其他用户。NHibernate完全填充部分加载的集合
/// <summary>
/// Gets a collection of projects that a user id has access to view.
/// </summary>
public static IEnumerable<Project> GetVisibleByUserFuture(ISession session, int userId)
{
Project p = null;
ProjectShare s = null;
IdentityUser u = null;
return session.QueryOver<Project>(() => p)
.Left.JoinAlias(() => p.SharePermissions
,() => s // Only join when we are not owner
, Restrictions.On(() => p.OwnerId).Not.IsIn(new [] { userId }))
.Left.JoinAlias(() => s.User,() => u)
.Where(() => s.User.UserId == userId || p.OwnerId == userId)
.Future();
}
你会发现SharePermissions
部分对的加盟,使限制:SharePermissions指向型IdentityUser
在这种情况下更详细的用户对象,我用的方法装载的Projects
的IEnumerable
只有该集合的一部分被加载。
稍后,我想从先前加载的IEnumerable集合中选取一个Project
,并无限制地加载完整的SharePermissions
集合。
我不完全确定我是怎么做到的。
我只是再次加载一个全新的Project
对象吗?
或者我可以重新使用现有的Project
对象,并以某种方式告诉NH完全填充SharePermissions集合?
可能想尝试'NhibernateUtil.Initialize(p.SharePermissions)'但我认为它只适用于代理对象,而不是部分加载的集合。 – dotjoe 2014-08-29 18:22:25