当生成.ado.net实体数据模型时,postgresql不出现在数据源中

本文关键字:postgresql 数据源 ado net 数据模型 实体 | 更新日期: 2023-09-27 18:08:10

我直接使用npgsql成功访问了现有的postgresql数据库。

    PostgreSQL 9.0.10(32位)
  1. Visual Studio 2015 Community(64位)
  2. 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位)
  1. Visual Studio 2015 Community(64位)
  2. NpgSql 2.2.5(通过Manage Nuget Packages)
  3. Setup_Npgsql-2.2.5.0-r3-net45.exe(来自GitHub,因为一些网站表示要求在GAC中使用相同的版本作为visual studio项目中使用的包;我没有拿版本
  4. Npgsql。entityframework6 2.2.5(通过Manage Nuget Packages)
  5. 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>

当生成.ado.net实体数据模型时,postgresql不出现在数据源中

我困惑了3天,因为同样的问题。

但是,我找到了解决这个问题的方法:

  1. 在visual studio环境中安装.vsix文件。https://github.com/npgsql/npgsql/releases/tag/v3.1.8 (NpgsqlDdexProvider)

  2. 安装Npgsql和EntityFramework6。

  3. 构建项目。(用于应用Nuget修改后的App.xaml配置)

  4. 您可以使用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设置,没有乐趣。为我修复它的步骤是:

  1. 安装Npgsql.vsix版本的npgsql我想从这里使用
  2. 移除EntityFramework, NpgsqlEntityFramework6.Npgsql
  3. 删除app.config中任何引用这些包的块包括entityFrameworkassemblyBindings
  4. 按此顺序重新安装上面的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 :

  1. 创建一个空白项目或使用您现有的项目
  2. Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution
  3. 搜索EntityFramework6。NpgSql包(由Shay Rojansky…),当前为3.2.0
  4. 选择你的新项目,点击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>