2011-11-16 8 views
0

私はIRoleオブジェクトに関連するMTMであるIUserオブジェクトのリストを持っています。これらのIRoleオブジェクトは、IPrivilegeオブジェクトに関連するMTMです。NHibernateにロードされていない依存オブジェクトのコレクション

IUserオブジェクトを取得すると、このIUserの(IList)リストにすべての関連するIRoleオブジェクトが表示されます。

IRoleオブジェクトを取得すると、このIRoleの(IList)リストにあるすべての関連するIPrivilegeオブジェクトを見ることができます。

しかし、ユーザをフェッチしてそのユーザのロールリストから1つのロールを調べると、そのロールオブジェクトの権限のリストは空です(ロールを直接取得するときにリストが正しく初期化されます)。

NHibernateは、セットアップで関連オブジェクトの関連オブジェクトを取得していないようです。私は間違って何をしていますか?どのようにしてNHibernateをユーザロールリストのすべてのロールオブジェクトを完全に初期化し、各ロールが関連する特権のリストを表示するようにすることができますか?

目次:注意!私はNHibernate新人です!

編集(@Firo):

... 
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"); 

(たIUser)

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

(IRole):

これらはたIUserとIRoleから関係マッピングフラグメントであります

(知的所有権)

... 
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>(); 
関連する問題