我们有一个程序,用户可以在其中指定数据库连接参数。通常的嫌疑人包括主机,端口,用户名,密码和表名。我们使用NHibernate连接到数据库。我们想要做的是能够使用NHibernate构建配置,然后在继续其他操作之前测试连接参数;通知用户失败。
这可以通过NHibernate完成,还是需要使用我们支持的特定驱动程序的每种数据库类型并为每种类型创建自定义TestConnection()方法?
答案 0 :(得分:1)
我意识到这是一篇很老的帖子 - 但我猜一个问题的答案永远不会受到伤害。
我认为没有办法明确告诉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
包含实际错误,并会告诉您:
答案 1 :(得分:0)
要配置Nhibernate,您有两个选择:
也就是说,在某些时候,您需要配置Nhibernate以使用适合您要与之通信的数据库的驱动程序。这意味着您需要能够构建不同类型的会话工厂(您支持的数据库类型)。要做到这一点,您需要的不仅仅是“主机,端口,用户名,密码和表名”。您需要知道数据库类型(Dialect)。
如果您打算尝试将数据库与可用的每个驱动程序连接,而不知道数据库类型是什么,则在数据库和方言不匹配时可能会遇到问题。想象一下,您在SqlServer2005机器上使用SqlServer2008方言。方言的不同可能导致您使用的特定SqlServer2008功能显然不起作用。此外,如果您不通过所有代码坚持基本SQL,您可能会生成Sql,例如,在PostgreSql中,但不在SqlServer中运行(思考序列等)。
要了解有关配置Nhibernate的更多信息,请阅读
最后请注意,Nhibernate支持多个数据库。但是,对于依赖于特定于数据库的构造的复杂域层,您的代码不会。