2011-11-16 2 views
0

У меня есть список объектов IUser, которые являются MTM, связанными с объектами IRole. Эти объекты IRole в свою очередь являются MTM, связанными с объектами IPrivilege.Коллекции в зависимых объектах, не загруженных в NHibernate

При извлечении объекта IUser я вижу все связанные объекты IRole в списке (IList) этого IUser.

При получении объекта IRole я могу видеть все связанные объекты IPrivilege в списке (IList) этого IRole.

Но когда я получаю пользователя и проверяю одну роль из этого списка ролей пользователей, список привилегий в этом ролевом объекте пуст (список правильно инициализируется при непосредственном получении роли).

Похоже, что 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>(); 
Смежные вопросы