2011-11-16 57 views
0

我有一个与IRole对象相关的IUser对象列表。这些IRole对象又是与IPrivilege对象相关的MTM。在NHibernate中未加载的依赖对象中的集合

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

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

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

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

BTW:注意!我是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"); 

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

+0

你能告诉我们用户和角色和查询的映射吗? – Firo

回答

0

您需要设置获取模式的所有关系无论是在映射或查询。例如:

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