NHibernate或FluentNHibernate似乎没有处理NpgsqlException

时间:2014-11-04 21:49:45

标签: c# sql-server postgresql nhibernate fluent-nhibernate

我尝试使用NHibernate和Fluent连接到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!!!";
             }

我在Net 3.5上使用NHibernate 2.1.2.4构建。我试图处理NpgsqlException但仍然出现错误消息。我的代码中缺少什么东西,或者它是NHibernate的错误?

编辑:这似乎是一个sporadict问题。基本上。我用Visual Studio C#编写了一个连接表单,它在AutoCAD环境中运行。用户在表单内输入连接信息,我的脚本尝试连接到数据库。上述代码的目的是尝试连接到数据库,如果没有,则向用户返回错误消息。

我尝试了上面的代码,将“Comptes”类替换为“ComptesMap”类,它是NHibernate Comptes映射类,看看发生了什么。我发现第一次在AutoCAD中运行脚本时,脚本连接到任何数据库,即使是不存在的数据库!关闭AutoCAD并重新打开它之后,我再次运行脚本,然后,我在任何PostgreSQL数据库上得到NpgsqlException,甚至是存在的那个!

我真的很麻烦。它表明存在环境问题。我是新手使用NHibernate。我尝试连接我在网上找到的代码。我不明白我的代码有什么问题。

1 个答案:

答案 0 :(得分:0)

我在脚本中发现了一个持久存在问题的问题,这个问题超出了这个问题的范围,这解释了为什么我第一次获得成功的连接,其他的也成功。

但我在本文中找到了如何处理来自Fluent NHibernate的Exception: Testing Connection Parameters with NHibernate

我只需更改我的代码:

 try {
      ... creation of the sessionFactory for both database types
 }
 catch (FluentNHibernate.Cfg.FluentConfigurationException e)
 {
      this.error = e.InnerException.Message;
 }

现在,它向用户显示连接是否失败。