You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EF Core 6搭建PostgreSQL数据库时遭遇get_Settings()调用失败问题

问题描述

开发基于C#的ASP.NET Core 6 Web API,使用Entity Framework Core 6搭建PostgreSQL数据库脚手架时执行以下命令报错:

dotnet ef dbcontext scaffold "Host=pi;Database=mydb;Username=root;Password=mypw" 
       Npgsql.EntityFrameworkCore.PostgreSQL --project=myAPI --verbose

错误信息:

Attempt by method 'Npgsql.EntityFrameworkCore.PostgreSQL.Scaffolding.Internal.NpgsqlDatabaseModelFactory.PopulateGlobalDatabaseInfo(Npgsql.NpgsqlConnection, Microsoft.EntityFrameworkCore.Scaffolding.Metadata.DatabaseModel)' to access method 'Npgsql.NpgsqlConnection.get_Settings()' failed.

补充信息:

  • 数据库部署在树莓派Docker容器中,使用最新PostgreSQL镜像,可通过本地Shell正常连接
  • 已安装的NuGet包版本:
Microsoft.EntityFrameworkCore (6.0.22)
Microsoft.EntityFrameworkCore.Design (6.0.22)
Microsoft.EntityFrameworkCore.Tools (6.0.22)
Npgsql.EntityFrameworkCore.PostgreSQL (6.0.22)
Swashbuckle.AspNetCore (6.5.0)
  • 手动创建DbContext后访问数据库仍出现相同错误;修改连接字符串密码会触发身份验证异常,说明连接本身可建立
解决方案

这个错误是Npgsql核心库与Npgsql.EntityFrameworkCore.PostgreSQL版本不兼容导致的反射访问失败,按以下步骤排查修复:

  1. 统一Npgsql版本
    检查项目是否直接安装了Npgsql包,确保其版本与Npgsql.EntityFrameworkCore.PostgreSQL完全一致(均为6.0.22)。若存在版本不一致的情况,卸载高版本Npgsql并安装匹配版本:

    dotnet remove package Npgsql
    dotnet add package Npgsql --version 6.0.22
    
  2. 清理NuGet缓存
    缓存损坏可能导致包版本匹配异常,执行以下命令清理所有NuGet本地缓存:

    dotnet nuget locals all --clear
    

    清理完成后,重新还原项目依赖:

    dotnet restore
    
  3. 验证项目目标框架
    确认项目的目标框架为.NET 6(EF Core 6与.NET 6版本严格对应才能避免兼容性问题),可在项目文件(.csproj)中查看:

    <TargetFramework>net6.0</TargetFramework>
    
  4. 重新生成并执行脚手架命令
    重新生成解决方案后,再次运行脚手架命令:

    dotnet ef dbcontext scaffold "Host=pi;Database=mydb;Username=root;Password=mypw" Npgsql.EntityFrameworkCore.PostgreSQL --project=myAPI --verbose
    

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:24:59