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