Тестирование параметров подключения с помощью NHibernate

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

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

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

Я не думаю, что есть способ явно указать 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`  содержит фактическую ошибку и сообщит вам, если:

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



Чтобы настроить Nhibernate, у вас есть два варианта:

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

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

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

Подробнее о настройке Nhibernate читайте:

1. [Chapter 3: Session Factory Configuration](http://nhforge.org/doc/nh/en/index.html#session-configuration). Specially sections 3.3, 3.4, 3.5 which talk about configuration parameters.

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