Как настроить Nhibernate, чтобы не сохранять объект в текущем сеансе - PullRequest
2 голосов
/ 11 мая 2011

У меня есть три объекта: пользователи, роли и разрешения. Там два контроллера: UserController и RolePermissionController. Все контроллеры обернуты сессией Nhibernate.

Когда я создаю полномочия для заполнения роли, пользователь не существует. Поэтому я храню свой новый объект Permission в сеансе ASP.MVC. Я хочу сохранить новую роль с разрешения, когда я создам пользователя в UserController.

Но когда я заполнил новую роль с существующим разрешением (я тогда получил от БД по Nhibernate) и пошел к контроллеру пользователя новый объект, созданный роли, без вызова Session.SaveOrUpdate или каких-либо других методов.

Я пытался использовать Evict после заполнения моей новой роли существующими разрешениями:

Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ISession>().Evict(newRole);

Но это не помогло. Поэтому я хочу сказать Nhibernate - не сохраняйте сущность в этой транзакции (RolePermissionController) - и сохраняйте ее как подключенную к сущностям объекта User в UserController.

1 Ответ

4 голосов
/ 25 мая 2011

Это не дает прямого ответа на ваш вопрос, но все же может быть решением - как насчет сбора всей информации через ViewModel, так что в итоге вы получите одно действие контроллера, которое получает информацию из ViewModel, создает Роль и Пользователь в одно и то же время (т. Е. Во время одного и того же запроса), и нет необходимости в беспорядочных сессиях.

Может быть, не тот ответ, который вы искали, но я сделал нечто подобное, и он работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...