EF6 PostgreSQL Database First无法生成模型:数据源无PostgreSQL选项
解决方案:ADO.NET实体模型找不到PostgreSQL数据源
我之前在使用EF6结合Npgsql生成数据库模型时也碰到过一模一样的问题,下面是几个亲测有效的解决步骤,你可以逐一尝试:
1. 重新调整NuGet包的安装顺序与配置
有时候包安装顺序不对会导致驱动没有正确注册,建议按以下步骤操作:
- 先卸载已安装的三个NuGet包:
EntityFramework、Npgsql、Npgsql.EntityFramework,顺便清理项目根目录下的packages文件夹(如果存在) - 按**Npgsql(2.2.7) → Npgsql.EntityFramework(2.2.7) → EntityFramework(6.2.0)**的顺序重新安装
- 安装完成后,打开项目的
App.config,检查是否存在DbProviderFactories配置节点。如果没有,手动添加以下内容(注意版本号要和你安装的Npgsql版本一致):
<configuration> <!-- 其他配置节点 --> <system.data> <DbProviderFactories> <remove invariant="Npgsql" /> <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.7.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" /> </DbProviderFactories> </system.data> </configuration>
2. 手动在VS中添加PostgreSQL数据源
如果图形界面的数据源列表没加载出PostgreSQL,可以手动指定驱动:
- 打开VS的服务器资源管理器,右键点击「数据连接」→「添加连接」
- 在弹出的窗口中,点击数据源右侧的「更改」按钮
- 若列表中没有PostgreSQL选项,点击「浏览」,找到项目
packages目录下的Npgsql.dll(路径示例:../packages/Npgsql.2.2.7/lib/net45/Npgsql.dll),选中后PostgreSQL就会出现在数据源列表里 - 填写数据库连接信息并测试连接,确认成功后,再去创建ADO.NET实体模型就能选择这个已配置好的连接了
3. 检查VS版本兼容性
Npgsql 2.2.7对Visual Studio版本有要求,它主要支持VS2012到VS2017。如果你用的是VS2019及以上版本,可能会出现兼容性问题:
- 如果可以升级包版本,建议将Npgsql和Npgsql.EntityFramework升级到3.2.x版本(这个版本完美兼容EF6.2.0和高版本VS)
- 如果必须使用2.2.7版本,建议切换到VS2017或更低版本尝试
4. 改用EF反向工程命令行工具
如果图形界面始终无法正常工作,可以直接用NuGet包管理器控制台的命令生成模型:
- 打开VS的包管理器控制台(路径:Tools → NuGet Package Manager → Package Manager Console)
- 将默认项目切换为你的控制台应用项目
- 运行以下命令(替换成你的数据库连接字符串):
Scaffold-DbContext "Server=你的服务器地址;Port=5432;Database=你的数据库名;User Id=用户名;Password=密码;" Npgsql.EntityFramework -OutputDir Models
执行完成后,项目会自动生成Models文件夹,里面包含所有数据库表对应的实体类和DbContext,效果和图形界面创建的完全一致
内容的提问来源于stack exchange,提问作者Luciferous
相关产品推荐
相关产品推荐

