NHibernate查询-多对多-急切加载(twitter风格的追随者/追随者)

NHibernate查询-多对多-急切加载(twitter风格的追随者/追随者),nhibernate,many-to-many,eager-loading,Nhibernate,Many To Many,Eager Loading,我一直在优化我的一个查询…这是我的场景 我有一个类似于Twitter的域,用户可以在其中跟随其他用户。下面是我的用户模型示例: User -> Followers (many-to-many users) -> Following (many-to-many users) 我现在需要返回用户“XYZ”的分页结果,但还需要确定当前登录的用户是否在跟踪返回的跟随者所需的即时加载数据 因此,我需要急切地加载它:user->followers->following(可能带有一个过滤器,

我一直在优化我的一个查询…这是我的场景

我有一个类似于Twitter的域,用户可以在其中跟随其他用户。下面是我的用户模型示例:

User
 -> Followers (many-to-many users)
 -> Following (many-to-many users)
我现在需要返回用户“XYZ”的分页结果,但还需要确定当前登录的用户是否在跟踪返回的跟随者所需的即时加载数据

因此,我需要急切地加载它:
user->followers->following
(可能带有一个过滤器,用于为当前用户获取
following
数据)

这甚至可以在一个查询中完成,还是需要执行两个单独的查询? 1个查询返回跟随者的分页数据,然后另一个查询指定带有返回ID的IN子句,为登录用户获取以下数据


Paul

您需要两个查询来获取数据,但是您可以使用NHibernate方法在一次行程中执行这两个查询

在你的场景中,你会这样做

var user = Session.CreateCriteria<User>()
                    .SetFetchMode("Followers", FethMode.Eager)
                    .Add(Restrictions.Eq("Id", userId)
                    .FutureValue<User>();

Session.CreateCriteria<User>()
                    .SetFetchMode("Following", FethMode.Eager)
                    .Add(Restrictions.Eq("Id", userId)
                    .FutureValue<User>();
var user=Session.CreateCriteria()
.SetFetchMode(“Followers”,FethMode.Eager)
.Add(Restrictions.Eq(“Id”),userId)
.未来价值();
Session.CreateCriteria()
.SetFetchMode(“Following”,FethMode.Eager)
.Add(Restrictions.Eq(“Id”),userId)
.未来价值();