【问题标题】:Connecting to Postgres using Fluent NHibernate throws Exception使用 Fluent NHibernate 连接到 Postgres 会引发异常
【发布时间】:2025-12-07 20:25:01
【问题描述】:

这是我的休眠设置:

FluentConfiguration configuration = Fluently.Configure()
            .Database(PostgreSQLConfiguration.Standard.ConnectionString(c => c
                    .Host("localhost")
                    .Port(5432)
                    .Database("PEDAux")
                    .Username("ped_admin")
                    .Password("xxxxx"))
                .ShowSql)
            .Mappings(m => m.FluentMappings
                .AddFromAssembly(Assembly.GetExecutingAssembly())
                .Conventions.Add<TableNameConvention>()
                .Conventions.Add<ColumnNameConvention>()
            )
            .ExposeConfiguration(x =>
            {
                // TODO: Not yet sure what to put in here
            });

        return configuration.BuildSessionFactory();

我收到以下错误:

内部异常 1: HibernateException:无法从 NHibernate.Driver.NpgsqlDriver 创建驱动程序,NHibernate,Version=5.2.0.0,Culture=neutral,PublicKeyToken=aa95f207798dfdb4。

内部异常 2: TargetInvocationException: 调用目标抛出异常。

内部异常 3: ArgumentException:找不到请求的 .Net Framework 数据提供程序。可能没有安装。

当我使用 SQLServer 时,相同的配置集似乎可以工作。当然,对于 SQL Server,我使用的是 SQLServer 配置对象。 项目在 .NET Version=v4.7.2" 上运行。

【问题讨论】:

    标签: fluent-nhibernate npgsql


    【解决方案1】:

    根据NpgsqlDriver docs

    要使用此驱动程序,您必须拥有 Npgsql.dll 程序集 可供 NHibernate 加载。

    根据错误,您似乎没有installed Npgsql.dll assembly,或者如果您有,则它没有在您的项目中被引用。

    【讨论】:

    • 我很确定我已经安装了 npgsql.dll (v 4.0.6),因为我为此使用了 Nuget 包管理器。它确实在项目中被正确引用。
    • 在这种情况下,我认为您的问题需要更多信息才能帮助您。该错误似乎表明它与驱动程序引用本身有关。其他要检查的事项:*.com/questions/13309761/…*.com/questions/21157069/…