У меня есть диаграмма классов, похожая на картинку выше. Я использую NHibernate для выполнения команд CRUD на объектах. Когда я пишу в таблицу разрешений (добавляет роль в коллекцию ролей пользователя и наоборот), NHibernate начинает вести себя странно.
У меня есть метод с именем UpdateRoles (), который обеспечивает актуальность всех ролей. Этот метод дает сбой, так как NHibernate иногда генерирует прокси-объекты, поэтому UpdateRoles () теперь думает, что Роль не существует и создает новый объект (что приводит к дублированию моей иерархии).
Я нашел шаблон для случая, когда NHibernate загружает объекты в качестве прокси:
Случай 1 работает, случай 2 - нет.
В случае 1 пользователь добавляется в пользовательскую коллекцию каждой роли на каждом из 3 уровней иерархии. Это работает как задумано.
В случае 2 пользователь добавляется только на последний уровень в иерархии. Теперь родительская роль (uCommerce) загружается как прокси-объект.
Моя RoleMap выглядит так:
References(x => x.ParentRole).Nullable().Column("ParentRoleId");
HasManyToMany(x => x.Users).AsSet().Table("uCommerce_Permission");
HasMany(x => x.Roles).Inverse().KeyColumn("ParentRoleId").Cascade.AllDeleteOrphan();
Моя UserMap выглядит так:
HasManyToMany(x => x.Roles).AsSet().Table("uCommerce_Permission");
Как я могу помешать NHibernate сделать это?
Я использую Fluennt NHibernate.
Указание Not (). LazyLoad () не предотвращает проблему. Также я читал, что указание такого - плохой случай программирования.