Мне нужно настроить приложение Fluent NHibernate / ASP.NET MVC 2 на использование одной строки подключения / подключения для каждого пользователя. Это потому что:
- Существует несколько баз данных, все с одной и той же схемой, в которые пользователь может войти.
- Устаревшее приложение, с которым это приложение ASP.NET работает в тандеме, основано на платформе поставщика БД и поэтому настаивает на использовании учетных записей пользователей БД.
- Попытка убедить администратора баз данных предоставить единую универсальную учетную запись пользователя будет еще более болезненной и трудоемкой, чем просто выяснение, как заставить ее работать.
Я чувствую, что должен объяснить свои причины, чтобы избежать нескольких ответов "Не делай этого".
Так или иначе, я сначала все настроил обычным, правильным способом с помощью одной строки подключения. Я использовал SessionManager
созданный LLBLGen для создания SessionFactory
. SessionFactory
создается и сохраняется в течение Application_Start()
. У меня также есть IHttpModule
, который связывает сеанс NHibernate с текущим контекстом сеанса. (Я забыл, с чьего веб-сайта я это получил).
То, что я сейчас хочу сделать, это заставить пользователей перейти на страницу входа. Они выберут свою базу данных и введут имя пользователя и пароль. Приложение создаст соединение с базой данных, сохранит его в сеансе пользователя, а NHibernate подхватит это соединение с базой данных и будет использовать его.
Любые советы по выполнению этого в целом были бы очень полезны, но на самом деле мне нужно просто преодолеть начальные препятствия: если я удаляю информацию о подключении к БД из конфигурации SessionFactory
, она выдаст жалобу и выдаст исключение. Если я не удаляю информацию о соединении с БД из конфигурации SessionFactory, она, похоже, использует эту строку соединения, даже если предоставлено другое соединение с использованием OpenSession(IDbConnection)
. Кроме того, теперь, когда я даже не хочу, чтобы NHibernate что-либо делал, пока пользователь не вошел в систему, я чувствую, что мой IHttpModule
может вызывать некоторые из этих проблем.
Прошу прощения, если это звучит скорее как бессвязная разглагольствование, чем вопрос; Я только что бился головой о стену некоторое время. Будем благодарны за любые предложения о передовой практике (кроме «Используйте одну строку подключения, идиот!»).