【发布时间】:2014-08-29 17:40:36
【问题描述】:
我有一个包含 Project 对象的架构。每个项目都有一个所有者,以及一个额外的 SharePermission 对象集合,其中详细说明了也可以访问该项目的其他用户。 SharePermissions 指向IdentityUser 类型的更详细的用户对象
在这种情况下,我使用以下方法加载Projects 的IEnumerable:
/// <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 部分对连接有限制,因此仅加载该集合的一部分。
稍后我想从之前加载的 IEnumerable 集合中选择一个 Project 并不受限制地加载完整的 SharePermissions 集合。
我不完全确定我应该怎么做。
我要再次加载一个全新的Project 对象吗?
或者我可以重新使用现有的Project 对象并以某种方式告诉 NH 完全填充 SharePermissions 集合吗?
【问题讨论】:
-
可能想试试
NhibernateUtil.Initialize(p.SharePermissions),但我认为它只适用于代理对象,不适用于部分加载的集合。
标签: c# nhibernate linq-to-nhibernate queryover