Лучшая практика подключения к сервисам nhibernate и ASP.NET/роли/профиля
У меня есть общее приложение ASP.NET(MVC), которое использует NHibernate в качестве уровня сохраняемости модели, а также службы членства ASP.NET/роль/профиль в качестве уровня управления пользователями.
Вопрос заключается в том, что можно считать лучшей практикой для создания связей между данными домена и пользователями. (Например, я хочу создать систему форума, я хочу связать каждую тему/сообщения с конкретным пользователем и хочу отображать пользователя по каждому запросу).
Это позитивы, о которых я думал:
-
Хранить идентификатор пользователя в NHibernate (например, иметь столбец Guid во всех ваших классах домена (сообщения, темы и т.д.), которые должны ссылаться на пользователя) и использовать GetUser каждый раз, когда вам нужно имя пользователя из guid (что может привести к n + 1 запросам)
B: Альтернативно, сохраните имя пользователя.
- Используйте одну и ту же базу данных и создайте объект домена, поддерживаемый только для чтения NHibernate, который отображает те же данные, что и службы M/R/P.
- Забудьте о M/R/P и создайте отдельную службу управления пользователями на основе NHibernate
- Забудьте об обоих и используйте J2EE/RoR/merb/DJango/etc. (пожалуйста, не выбирайте эту опцию:))
- другой...
Ответы
Ответ 1
Я бы пошел на шаг 2 (почти, поскольку он не обязательно должен быть только для чтения) и создать собственный поставщик членства для NHibernate.
Чтобы сэкономить время, вы можете использовать существующий, например, один из Manuel Abadia.
С этим вы сохраняете полную работоспособность NHibernate (ленивая загрузка и т.д.) и получаете услуги M/R/P.
Ответ 2
Существует также поставщик членства на базе NHibernate по адресу CodePlex
Ответ 3
4 парня из rolla имеют отличный пост, если вы хотите создать своего собственного провайдера поверх API членства asp.net: http://www.4guysfromrolla.com/articles/110310-1.aspx