NHibernate或FluentHibernate没有';似乎无法处理NpgsqlException
本文关键字:处理 NpgsqlException FluentHibernate 没有 NHibernate | 更新日期: 2023-09-27 18:29:19
我尝试用Fluent的NHibernate连接PostgreSQL和SQL Server数据库。我试图连接到一个不存在的数据库来处理这种用户可能性。当我运行测试时,当我使用PostgreSQL时,我收到一条消息,比如"NpgsqlException不由用户代码处理"当我尝试使用SQL Server时,SqlException被正确处理。以下是我的PostgreSQL 应用程序中的连接代码
try{
this.sessionFactory = Fluently.Configure()
.Database(
PostgreSQLConfiguration.PostgreSQL82.ConnectionString(
@"Server=" + this.iGreffeDesktop.Hostname +
";Port=" + this.iGreffeDesktop.Port +
";Database=" + this.iGreffeDesktop.Database +
";User ID=" + this.iGreffeDesktop.Username +
";Password=" + this.iGreffeDesktop.Password +
";")
.Mappings(
m => m.FluentMappings
.AddFromAssemblyOf<Comptes>())
.BuildSessionFactory();
}
catch (Exception e)
{
this.error = "Connection error!!!";
}
和SQL Server
try{
this.sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2005
.ConnectionString(
@"Server=" + this.iGreffeDesktop.Hostname +
";initial catalog=" + this.iGreffeDesktop.Database +
";user=" + this.iGreffeDesktop.Username +
";password=" + this.iGreffeDesktop.Password +
";")
.ShowSql()
.Mappings(
m =>
m.FluentMappings
.AddFromAssemblyOf<Comptes>()
)
.BuildSessionFactory();
}
catch (Exception e)
{
this.error = "Connection error!!!";
}
我在Net3.5上使用NHibernate 2.1.2.4构建。我试图处理NpgsqlException,但错误消息仍然出现。是我的代码中缺少什么,还是NHibernate错误?
编辑:这似乎是个偶然的问题。大体上我编写了一个与Visual Studio C#的连接表单,后者在AutoCAD环境中运行。用户在表单中输入连接信息,我的脚本尝试连接到数据库。上面代码的目的是尝试连接到数据库,如果没有,则向用户返回错误消息。
我尝试了上面的代码,将"Comptes"类替换为"ComptesMap"类,后者是NHibernate Comptes映射类,以查看发生了什么。我发现,当我第一次在AutoCAD中运行该脚本时,该脚本会连接到任何数据库,即使是不存在的数据库!!!在关闭AutoCAD并重新打开它之后,我再次运行脚本,然后,我在任何PostgreSQL数据库上都会得到NpgsqlException,即使是存在的数据库!!!
我真的很麻烦。这表明存在环境问题。我是使用NHibernate的新手。我尝试使用我在网上找到的代码进行连接。我不明白我的代码出了什么问题。
我在脚本中发现了一个对象的持久性问题,该对象超出了这个问题的范围,这解释了为什么我第一次获得成功的连接时,其他对象也成功了。
但我在本文中发现了如何处理Fluent NHibernate的异常:用NHibernate 测试连接参数
我只是更改我的代码:
try {
... creation of the sessionFactory for both database types
}
catch (FluentNHibernate.Cfg.FluentConfigurationException e)
{
this.error = e.InnerException.Message;
}
现在,它向用户显示连接是否失败。