Тестирование параметров соединения с помощью NHibernate - PullRequest
2 голосов
/ 27 октября 2011

У нас есть программа, в которой пользователи могут указать свои параметры подключения к базе данных. Обычные подозреваемые, включая хост, порт, имя пользователя, пароль и имя таблицы. Мы подключаемся к базе данных с помощью NHibernate. Мы хотели бы создать конфигурацию с помощью NHibernate, а затем протестировать параметры соединения, прежде чем продолжать другие операции; уведомление пользователя об ошибке.

Возможно ли это сделать через NHibernate, или для этого потребуется использовать каждый тип базы данных, который мы поддерживаем, для конкретного драйвера и создать собственный метод TestConnection () для каждого типа?

Ответы [ 2 ]

1 голос
/ 01 января 2012

Я понимаю, что это старый пост, но я думаю, что ответ на вопрос никогда не болит.

Я не думаю, что есть способ явно сказать NHibernate, чтобы проверить строку подключения. Однако при создании экземпляра SessionFactory он попытается подключиться к базе данных. Вы можете обернуть свое создание SessionFactory в Try / Catch и обработать ошибку таким образом.

Я использую Fluent NHibernate, но я уверен, что следующий пример все же объяснит ситуацию.

Dim sf as SessionFactory
Try
    sf = CreateSessionFactory()
Catch ex as FluentNHibernate.Cfg.FluentConfigurationException
    Messagebox.Show(ex.InnerException.Message)
End Try

ex.InnerException.Message содержит фактическую ошибку и сообщит вам, если:

  • Строка подключения неверна
  • Сервер не найден
  • Пользователь / пароль не может быть аутентифицирован
0 голосов
/ 28 октября 2011

Для настройки Nhibernate у вас есть два варианта:

  1. Установите диалект при создании фабрики сессий. Это назначит разумное значение по умолчанию для ADO Nhibernate и других значений конфигурации.
  2. Вручную установите значения конфигурации.

Тем не менее, в какой-то момент вам необходимо настроить Nhibernate для использования соответствующего драйвера для базы данных, с которой вы хотите общаться. Это означает, что вам нужно иметь возможность создавать фабрики сеансов разных типов (поддерживаемые вами типы баз данных). Для этого вам нужно больше, чем просто «хост, порт, имя пользователя, пароль и имя таблицы». Вам необходимо знать тип базы данных (диалект).

Если вы намереваетесь просто попытаться соединить базу данных с каждым доступным вам драйвером, не зная, какой тип базы данных, вы можете столкнуться с проблемами, когда база данных и диалект не совпадают. Представьте, что вы используете диалект SqlServer2008 на компьютере SqlServer2005. Разница в диалекте может привести к тому, что конкретная функция SqlServer2008, которую вы используете, очевидно, не будет работать. Более того, если вы не придерживаетесь базового SQL во всем своем коде, вы можете генерировать Sql, который работает, скажем, в PostgreSql, но не в SqlServer (последовательности Think и тому подобное).

Чтобы узнать больше о настройке Nhibernate, прочитайте:

  1. Глава 3: Конфигурация фабричной сессии . Специально разделы 3.3, 3.4, 3.5, в которых говорится о параметрах конфигурации.

Последнее замечание: Nhibernate поддерживает несколько баз данных. Но для сложных доменных слоев, где вы полагаетесь на специфические для базы данных конструкции, ваш код этого не делает.

...