当生成.ado.net实体数据模型时,postgresql不出现在数据源中
本文关键字:postgresql 数据源 ado net 数据模型 实体 | 更新日期: 2023-09-27 18:08:10
我直接使用npgsql成功访问了现有的postgresql数据库。
- PostgreSQL 9.0.10(32位)
- Visual Studio 2015 Community(64位)
- NpgSql 2.2.5(通过ManageNuget包)
然而,数据库有25+表和400+列,因此我的意图是使用实体框架+ . ado.net实体数据模型,以避免必须编码访问所有列。我搜索并尝试了这个网站上的一切,npgsql网站http://www.npgsql.org/doc/ddex.html,…但是我没有成功地生成。ado.net实体数据模型,因为postgresql没有出现在数据源中。
- PostgreSQL 9.0.10(32位)
- Visual Studio 2015 Community(64位)
- NpgSql 2.2.5(通过Manage Nuget Packages)
- Setup_Npgsql-2.2.5.0-r3-net45.exe(来自GitHub,因为一些网站表示要求在GAC中使用相同的版本作为visual studio项目中使用的包;我没有拿版本
- Npgsql。entityframework6 2.2.5(通过Manage Nuget Packages)
- Entityframework 6.1.3(通过Manage Nuget Packages)
我要做什么postgresql出现为数据源时,试图生成一个。ado.net实体数据模型?
还是Visual Studio 2015社区不允许为postgresql生成。ado网络实体数据模型?
编辑我添加了以下信息,希望得到回复:
Microsoft Windows 8.1 6.3.9600 build 9600 64位使用
解压"C:'Windows' microt.net 'Framework'v4.0.30319'Config'machine.config"
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
</DbProviderFactories>
</system.data>
解压"C:'Windows'Microsoft.NET'Framework64'v4.0.30319'Config'machine.config"
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
</DbProviderFactories>
</system.data>
"Visual Studio - packages.config"
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="Npgsql" version="2.2.5" targetFramework="net452" />
<package id="Npgsql.EntityFramework" version="2.2.5" targetFramework="net452" />
</packages>
"Visual Studio - App.config"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
我困惑了3天,因为同样的问题。
但是,我找到了解决这个问题的方法:
-
在visual studio环境中安装.vsix文件。https://github.com/npgsql/npgsql/releases/tag/v3.1.8 (NpgsqlDdexProvider)
-
安装Npgsql和EntityFramework6。
-
构建项目。(用于应用Nuget修改后的App.xaml配置)
-
您可以使用ADO。. NET实体模型生成。
另外,dotConnect在Express版本中不支持实体模型。只支持商业版。
但是目前,Npgsql在EDM中有立即关闭的错误。所以,我在寻找解。
同样的问题我已经有一段时间了。然后,我尝试安装dotconnect https://www.nuget.org/packages/dotConnect.Express.for.PostgreSQL/7.4.506/。而且,它有效!希望能有所帮助。
这个问题可以通过添加这里提供的Visual Studio扩展来解决:http://www.npgsql.org/doc/ddex.html
这在VS2017中困扰了我几个小时。我手动玩了app.config
设置,没有乐趣。为我修复它的步骤是:
- 安装
Npgsql.vsix
版本的npgsql我想从这里使用 - 移除
EntityFramework
,Npgsql
,EntityFramework6.Npgsql
- 删除
app.config
中任何引用这些包的块包括entityFramework
和assemblyBindings
。 - 按此顺序重新安装上面的nuget包
编辑
我还必须向app.config
添加以下内容才能成功运行Enable-Migrations
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"/>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF"/>
</DbProviderFactories>
</system.data>
In VS 2019
使用NuGet安装'PostgreSQL provider for Entity Framework 6'包你不需要安装其他任何东西,Npgsql包含在包中。指出:
该包仅适用于当前项目,必须与新项目一起重新安装,机器范围内没有任何安装
不要为你的应用程序安装提供程序包(这里要解决的问题)和安装Visual Studio扩展称为'Visual Studio Integration' (Npgsql.vsix),以便VS可以打开PostgreSQL数据库(例如在服务器浏览器中)。
为EF6安装PostgreSQL provider :
- 创建一个空白项目或使用您现有的项目
- Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution
- 搜索EntityFramework6。NpgSql包(由Shay Rojansky…),当前为3.2.0
- 选择你的新项目,点击Install
(如果您愿意,您可以使用PM命令并输入Install-Package EntityFramework6.Npgsql -Version 3.2.0
)
如果工厂没有发现异常
由于某些原因,你可能在执行应用程序时收到一个异常,因为。net找不到提供程序工厂:
ADO。具有不变名称'Npgsql'的。NET提供程序不是已在计算机或应用程序配置文件中注册,或者无法注册加载。有关详细信息,请参阅内部异常。在system.Data.Common。 DbProviderFactories.GetFactory(字符串providerInvariantName)
在我的情况下,在App.config
中添加这个修复了这个问题:
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"/>
<add invariant="Npgsql" name="Npgsql Data Provider" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF"/>
</DbProviderFactories>
</system.data>
如果有人能解释一下为什么上面的部分缺失了…
现在你应该能够用ADO为PostgreSQL生成一个派生的DbContext。. NET实体数据模型向导。
安装细节,仅供参考
这将复制文件到项目的子目录package
并引用它们:
- Npgsql.4.0.2
- EntityFramework.6.2.0(微软)
- EntityFramework6.Npgsql.3.2.0
- System.Threading.Tasks.Extensions.4.5.0
- System.Runtime.CompilerServices.Unsafe.4.5.0
- System.ValueTuple.4.5.0
这也将在应用程序配置文件App.config
中创建条目:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>