#asp.net-mvc #nhibernate #asp.net-mvc-3 #c#-4.0
#asp.net-mvc #nhibernate #asp.net-mvc-3 #c #-4.0
Вопрос:
У меня есть три объекта: пользователи, роли и разрешения. Есть два контроллера: UserController и RolePermissionController. Весь контроллер, обернутый сеансом Nhibernate.
Когда я создаю разрешения на заполнение роли, пользователь не существует. Итак, я сохраняю свой новый объект разрешений в сеансе ASP.MVC. Я хочу сохранить новую роль с разрешением, когда я создам пользователя в UserController.
Но когда я заполнил новую роль разрешением exist (которое я затем получил из базы данных с помощью Nhibernate) и перешел к пользовательскому контроллеру, была создана новая роль объекта, без сеанса вызова.saveOrUpdate или любые другие методы.
Я попытался использовать Execut после заполнения моей новой роли существующими разрешениями:
Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ISession>().Evict(newRole);
Но это не помогло.
Итак, я хочу сказать Nhibernate — не сохраняйте объект в этой транзакции (RolePermissionController) — и сохраните как подключенный к объектам пользовательского объекта в UserController.
Комментарии:
1. Я предполагаю, что в ваших сопоставлениях настроен каскад от разрешения к роли.
2. Я так не думаю. Проблема в сеансе Nhibernate, а не в каскаде.
3. вы уверены, что объект сеанса, для которого вы вызываете функцию выселения (), тот же, что используется в RolePermissionController? Я бы использовал. GetHashCode(), чтобы убедиться, что это тот же объект.
Ответ №1:
Это не дает прямого ответа на ваш вопрос, но все же может быть решением — как насчет сбора всей информации через ViewModel, чтобы в итоге вы получили одно действие контроллера, которое берет информацию из ViewModel, создает роль и пользователя одновременно (т. Е. Во время одного запроса), и нет необходимости в беспорядочных сеансовых материалах.
Возможно, это не тот ответ, который вы искали, но я сделал нечто подобное таким образом, и это работает просто отлично.