Test des paramètres de connexion avec NHibernate

Nous avons un programme où les utilisateurs peuvent spécifier leurs paramètres de connexion à la base de données. Les suspects habituels, notamment l'hôte, le port, le nom d'utilisateur, le mot de passe et le nom de la table. Nous nous connectons à la base de données avec NHibernate. Ce que nous aimerions faire, c’est pouvoir construire la configuration avec NHibernate puis tester les paramètres de connexion avant de poursuivre les autres opérations; notifier l'utilisateur de l'échec.

Est-ce possible via NHibernate ou nécessitera-t-il l'utilisation de chaque type de base de données pris en charge par le pilote spécifique et la création d'une méthode TestConnection() personnalisée pour chaque type?

2

2 Réponses

Je sais que c’est un vieil article - mais j’imagine qu’une réponse à une question ne fait jamais de mal.

Je ne pense pas qu'il y ait un moyen de dire explicitement à NHibernate de tester la chaîne de connexion. Cependant, lorsque vous instanciez SessionFactory, il tentera de se connecter à la base de données. Vous pouvez envelopper votre création SessionFactory dans un Try/Catch et gérer l'erreur de cette façon.

J'utilise Fluent NHibernate, mais je suis sûr que l'exemple suivant expliquera tout de même la situation.

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

Le ex.InnerException.Message contient l'erreur réelle et vous indiquera si:

  • La chaîne de connexion n'était pas valide
  • Impossible de trouver le serveur
  • L'utilisateur/le passe n'a pas pu être authentifié
1
ajouté

Pour configurer Nhibernate, vous avez deux options:

  1. Définissez le dialecte lorsque vous construisez la fabrique de sessions. Ceci assignera une valeur par défaut raisonnable à l’ADO de Nhibernate et à d’autres valeurs de configuration.
  2. Définissez manuellement les valeurs de configuration.

Cela dit, vous devez éventuellement configurer Nhibernate pour utiliser le pilote approprié pour la base de données à laquelle vous souhaitez parler. Cela signifie que vous devez pouvoir créer des fabriques de sessions de différents types (types de base de données pris en charge). Pour ce faire, vous avez besoin de plus que simplement "hôte, port, nom d'utilisateur, mot de passe et nom de la table". Vous devez connaître le type de base de données (dialecte).

Si vous souhaitez simplement connecter la base de données avec tous les pilotes disponibles sans connaître le type de base, vous risquez de rencontrer des problèmes lorsque la base de données et le dialecte ne correspondent pas. Imaginez que vous utilisez un dialecte SqlServer2008 sur un ordinateur SqlServer2005. La différence de dialecte peut faire en sorte qu'une fonction particulière de SqlServer2008 que vous utilisez ne fonctionne pas. De plus, si vous ne vous en tenez pas à tout le code SQL, vous risquez de générer un SQL qui fonctionne, par exemple, dans PostgreSql mais pas dans SqlServer (séquences de réflexion, etc.).

Pour en savoir plus sur la configuration de Nhibernate, lisez:

  1. Chapter 3: Session Factory Configuration. Specially sections 3.3, 3.4, 3.5 which talk about configuration parameters.

Dernière remarque, Nhibernate prend en charge plusieurs bases de données. Toutefois, pour les couches de domaine complexes pour lesquelles vous utilisez des constructions spécifiques à une base de données, votre code ne le fait pas.

0
ajouté
Ce que je reçois - ce que je recherche, c’est un moyen de dire: "OK, voici l’hôte/le port/le nom d’utilisateur/le mot de passe/le nom de la base de données, assurons-nous que nous pouvons nous connecter avant de continuer" vraiment. Toutes les configurations de pilote fonctionnent correctement lorsque ces valeurs sont valides. J'essaie de voir si je peux utiliser nhibernate pour tester la validité de ces paramètres. Faire plus de sens?
ajouté l'auteur MedTechDeveloper, source