未在NHibernate中加载的依赖对象中的集合

时间:2011-11-16 16:01:19

标签: nhibernate fluent-nhibernate

我有一个与IRole对象有关的MTM IUser对象列表。这些IRole对象又是与IPrivilege对象相关的MTM。

检索IUser对象时,我可以在此IUser的(IList)列表中看到所有相关的IRole对象。

检索IRole对象时,我可以在此IRole的(IList)列表中看到所有相关的IPrivilege对象。

但是当我获取用户并从该用户角色列表中检查一个角色时,该角色对象中的权限列表为空(在直接获取角色时正确初始化列表)。

看起来NHibernate没有在我的设置中获取相关对象的相关对象。我究竟做错了什么?如何让NHibernate完全初始化用户角色列表中的所有角色对象,以便每个角色显示相关权限列表?

顺便说一句:注意!我是NHibernate的新秀!

编辑(@Firo):

这些是来自IUser和IRole的关系映射片段:

(IUSER)

...
HasManyToMany<HbnRole>(x => x.Roles).Table("USERROLEMAP")
                                    .ParentKeyColumn("USERID")
                                    .ChildKeyColumn("ROLEID")
                                    .Cascade.All();

(IRole)

...
HasManyToMany<HbnPrivilege>(x => x.Privileges).Table("ROLEPRIVILEGEMAP")
                                              .ParentKeyColumn("ROLEID")
                                              .ChildKeyColumn("PRIVILEGEID")
                                              .Cascade.All();

HasManyToMany<HbnUser>(x => x.Users).Table("USERROLEMAP")
                                    .Inverse()
                                    .LazyLoad()
                                    .ParentKeyColumn("ROLEID")
                                    .ChildKeyColumn("USERID");

(IPrivilege)

...
HasManyToMany<HbnRole>(x => x.Roles).Table("ROLEPRIVILEGEMAP")
                                    .Inverse()
                                    .LazyLoad()
                                    .ParentKeyColumn("PRIVILEGEID")
                                    .ChildKeyColumn("ROLEID");

说实话,我不知道如何捕获查询......: - (

1 个答案:

答案 0 :(得分:1)

您需要为映射或查询中的所有关系设置获取模式。例如:

var data = Session.CreateCriteria<User>()
                .CreateAlias("Role", "r", JoinType.InnerJoin)
                .SetFetchMode("r.Privelege", FetchMode.Join)
                .List<User>();