Testing Connection Parameters with NHibernate

六月ゝ 毕业季﹏ 提交于 2019-12-31 02:53:06

问题


We have a program where users can specify their database connection parameters. The usual suspects including host, port, username, password, and table name. We are connecting to the database using NHibernate. What we'd like to do is be able to build the configuration with NHibernate and then test the connection parameters before continuing with other operations; notifying the user of failure.

Is this possible to do through NHibernate, or will it require using each database type we support's specific driver and creating a custom TestConnection() method for each type?


回答1:


I realize this is an old post - but I guess an answer to a question never hurts.

I don't think there is a way to explicitly tell NHibernate to test out the connection string. However, when you instantiate the SessionFactory it will attempt to connect to the database. You could wrap your SessionFactory creation in a Try/Catch and handle the error that way.

I use Fluent NHibernate, but I'm sure the following example will still explain the situation.

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

The ex.InnerException.Message contains the actual error and will tell you if:

  • The connection string was invalid
  • The server could not be found
  • The user/pass could not be authenticated



回答2:


To configure Nhibernate you have two options:

  1. Set the dialect when you are building the session factory. This will assign reasonable default value to Nhibernate's ADO and other configuration values.
  2. Manually set the configuration values.

That said, at some point, you need to configure Nhibernate to use the appropriate driver for the database you want to talk to. Which means you need to be able to build Session Factories of different types (your supported database types). To do this you need more than just "host, port, username, password, and table name". You need to know the database type(Dialect).

If you intend to just try to connect the database with every driver available to you not knowing what the database type is, you may run into problems when the database and the dialect don't match. Imagine you use a SqlServer2008 dialect on SqlServer2005 machine. The difference in dialect can cause a particular SqlServer2008 feature you are using not to, obviously, work. Moreover, if you don't stick to basic SQL through out all your code, you may be generating Sql that works, say, in PostgreSql but not in SqlServer (Think sequences and such).

To learn more about configuring Nhibernate read:

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

Last note, Nhibernate supports multiple databases. But, for complex domain layers where you rely on database specific constructs, your code doesn't.



来源:https://stackoverflow.com/questions/7916738/testing-connection-parameters-with-nhibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!