1

冒着问非常基本的问题的风险,但仍然如此。使用这样的查询时

List<User> users = session.Query<User>.ToList();

在调试中,我看到除了用户实体之外,我还获取了角色集合和照片集合。

我的问题是如何只选择没有子集合的用户集合。

谢谢

更新:

public RoleMap()
{
   Table("Role");
   Id(x => x.Id).GeneratedBy.Identity();
   Map(x => ...
   References(x => x.User).Column("UserId");           
}

据我所知,默认情况下延迟加载是打开的。纠正我如果我在这里做错了什么。

4

4 回答 4

4

当您在调试时查看集合时,您会使用 nhibernate 创建的代理从数据库加载数据。执行时检查生成的sql查询

 List<User> users = session.Query<User>.ToList();

你应该只看到User数据,角色和照片不应该在那里。

于 2012-05-29T19:38:26.253 回答
1

仔细检查您生成的 sql。

延迟加载默认情况下是打开的,所以我认为您在调试时输入了这些集合 + 符号到相关集合,并且这些集合应该按需加载,单击该符号。

请使用 nhibernate profiler 检查生成的 sql。

于 2012-05-29T20:13:15.843 回答
0

使用投影...

 ICriteria crit = Session.CreateCriteria<District>();

        crit.SetProjection(Projections.ProjectionList()
         .Add(Projections.Alias(Projections.Property("Description"), "Description"))
         .Add(Projections.Alias(Projections.Property("Active"), "Active"))
         .Add(Projections.Alias(Projections.Property("Id"), "Id"))
         );
        crit.SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(District)));
        return crit.List<District>();

这会滋润您感兴趣的属性,而忽略其他属性……有利于减少网络上的流量。

于 2012-05-29T19:42:12.980 回答
0

使用延迟加载: http: //nhibernate.info/doc/howto/various/lazy-loading-eager-loading.html

这意味着:NHibernate 只会在您真正需要它们时加载这些子(关联)。

于 2012-05-29T19:43:43.967 回答