Свободный NHibernate с ASP.NET MVC 2 - Управление сессиями с 1 строкой подключения на пользователя - PullRequest
1 голос
/ 07 декабря 2010

Мне нужно настроить приложение Fluent NHibernate / ASP.NET MVC 2 на использование одной строки подключения / подключения для каждого пользователя. Это потому что:

  1. Существует несколько баз данных, все с одной и той же схемой, в которые пользователь может войти.
  2. Устаревшее приложение, с которым это приложение ASP.NET работает в тандеме, основано на платформе поставщика БД и поэтому настаивает на использовании учетных записей пользователей БД.
  3. Попытка убедить администратора баз данных предоставить единую универсальную учетную запись пользователя будет еще более болезненной и трудоемкой, чем просто выяснение, как заставить ее работать.

Я чувствую, что должен объяснить свои причины, чтобы избежать нескольких ответов "Не делай этого".

Так или иначе, я сначала все настроил обычным, правильным способом с помощью одной строки подключения. Я использовал SessionManager созданный LLBLGen для создания SessionFactory. SessionFactory создается и сохраняется в течение Application_Start(). У меня также есть IHttpModule, который связывает сеанс NHibernate с текущим контекстом сеанса. (Я забыл, с чьего веб-сайта я это получил).

То, что я сейчас хочу сделать, это заставить пользователей перейти на страницу входа. Они выберут свою базу данных и введут имя пользователя и пароль. Приложение создаст соединение с базой данных, сохранит его в сеансе пользователя, а NHibernate подхватит это соединение с базой данных и будет использовать его.

Любые советы по выполнению этого в целом были бы очень полезны, но на самом деле мне нужно просто преодолеть начальные препятствия: если я удаляю информацию о подключении к БД из конфигурации SessionFactory, она выдаст жалобу и выдаст исключение. Если я не удаляю информацию о соединении с БД из конфигурации SessionFactory, она, похоже, использует эту строку соединения, даже если предоставлено другое соединение с использованием OpenSession(IDbConnection). Кроме того, теперь, когда я даже не хочу, чтобы NHibernate что-либо делал, пока пользователь не вошел в систему, я чувствую, что мой IHttpModule может вызывать некоторые из этих проблем.

Прошу прощения, если это звучит скорее как бессвязная разглагольствование, чем вопрос; Я только что бился головой о стену некоторое время. Будем благодарны за любые предложения о передовой практике (кроме «Используйте одну строку подключения, идиот!»).

1 Ответ

1 голос
/ 08 декабря 2010

Видели ли вы http://www.codeproject.com/KB/aspnet/NHibernateMultipleDBs.aspx? Это не объясняет, как это сделать с помощью Fluent, довольно прямой NHibernate, но я думаю, это будет хорошей отправной точкой.

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