我有一個與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