NHibernateで接続パラメータをテストする

ユーザーがデータベース接続パラメータを指定できるプログラムがあります。ホスト、ポート、ユーザー名、パスワード、テーブル名などの通常の疑いがあるもの。 NHibernateを使用してデータベースに接続しています。私たちがやりたいことは、NHibernateを使って設定を構築してから、他の操作を続ける前に接続パラメータをテストできることです。ユーザに障害を通知する。

これはNHibernateを介して行うことが可能か、それともサポートする各データベースタイプを使用し、それぞれのタイプに対してカスタムのTestConnection()メソッドを作成する必要がありますか?

2
追加された
ビュー: 2

2 答え

私はこれが古い投稿であることを認識していますが、質問に対する回答は決して痛いものではないと思います。

私は、NHibernateに接続文字列をテストするように明示的に指示する方法はないと思います。ただし、SessionFactoryをインスタンス化すると、データベースに接続しようとします。 Try/CatchでSessionFactoryの作成をラップし、そのようにエラーを処理することができます。

私は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 には実際のエラーが含まれています。

  • 接続文字列が無効です
  • サーバーが見つかりませんでした
  • ユーザー/パスを認証できませんでした
1
追加された

Nhibernateを設定するには、2つのオプションがあります:

  1. セッションファクトリを構築するときに方言を設定します。これはNhibernateのADOと他の設定値に合理的なデフォルト値を割り当てます。
  2. 設定値を手動で設定します。

それは、ある時点で、あなたが話したいデータベースに適切なドライバを使うようにNhibernateを設定する必要があるということです。つまり、さまざまなタイプのセッションファクトリ(サポートされているデータベースタイプ)を構築できる必要があります。これを行うには、「ホスト、ポート、ユーザー名、パスワード、テーブル名」以上のものが必要です。データベースの種類(Dialect)を知る必要があります。

利用可能なすべてのドライバとデータベースを接続しようとする場合は、データベースとダイアレクトが一致しない場合に問題が発生する可能性があります。 SqlServer2005マシンでSqlServer2008方言を使用するとします。方言の違いによって、使用しているSqlServer2008の特定の機能が動作しなくなる可能性があります。さらに、すべてのコードを通して基本的なSQLに固執しないと、PostgreSQLでは動作しますが、SqlServerでは動作しないSQLを生成している可能性があります(シンクシーケンスなど)。

Nhibernateの設定の詳細については、

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

最後に、Nhibernateは複数のデータベースをサポートしています。しかし、データベース固有の構造に依存している複雑なドメイン層では、コードには意味がありません。

0
追加された
私が探しているのは、 "これはホスト/ポート/ユーザ名/パスワード/データベース名です。本当に続ける前に正常に接続できるかどうかを確認してみましょう"と言います。私はこれらの値が有効なときにすべてのドライバ設定がうまく動作しています。私はそれらのparamaterの妥当性をテストするためにnhibernateを使用できるかどうかを調べようとしています。もっと理にかなっている?
追加された 著者 MedTechDeveloper,