Entity framework 将npgsql配置为与.NET3.5和EF一起使用
我正在开发一个应用程序,它使用与.NETFramework 3.5(不是更新版本)一起工作的第三方库。我的应用程序是WPF,我需要使用EntityFramework连接到PostgreSQL数据库 我在谷歌上搜索了一下,发现连接Postgre最流行的方式是使用npgsql提供程序 所以,我尝试从他们的网站安装npgsql,然后发现exe安装程序只安装.NET4.0和4.5的npgsql。它还为VisualStudio安装了vsix扩展,该扩展工作正常。我必须下载.NET 3.5的npgsql库,并手动添加对npgsql.dll和npgsql.EntityFrameworkLegacy.dll的引用 我还将我的应用程序目标框架设置为3.5,并使用Nuget安装EntityFramework(4.1.10715是使用.NET 3.5的最新版本) 然后,我可以使用edmx向导(它检测到我的Entityframework设置为“3.5”)连接到数据库,并生成edmx和一些类 所以,问题是,当我尝试在我的应用程序中获取一些数据时,如下所示:Entity framework 将npgsql配置为与.NET3.5和EF一起使用,entity-framework,visual-studio,postgresql,.net-3.5,npgsql,Entity Framework,Visual Studio,Postgresql,.net 3.5,Npgsql,我正在开发一个应用程序,它使用与.NETFramework 3.5(不是更新版本)一起工作的第三方库。我的应用程序是WPF,我需要使用EntityFramework连接到PostgreSQL数据库 我在谷歌上搜索了一下,发现连接Postgre最流行的方式是使用npgsql提供程序 所以,我尝试从他们的网站安装npgsql,然后发现exe安装程序只安装.NET4.0和4.5的npgsql。它还为VisualStudio安装了vsix扩展,该扩展工作正常。我必须下载.NET 3.5的npgsql库,
using (var db = new Entities())
{
var list = db.MyItems.ToList()
}
它总是会出错:
在配置中找不到指定的存储提供程序,或
无效
我通过以下方式配置了我的App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<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" />
</providers>
</entityFramework>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
<connectionStrings>
<add name="myEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Npgsql;provider connection string="PORT=5432;TIMEOUT=15;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;COMMANDTIMEOUT=20;COMPATIBLE=2.2.5.0;DATABASE=mydb;HOST=localhost;PASSWORD=postgres;USER ID=postgres"" providerName="System.Data.EntityClient" />
</connectionStrings>
我想我应该在App.config中更改一些内容,但无法找出问题所在
请帮助。商店提供商失踪。
存储提供程序通常是ADO.Net提供程序。通常在machine.config中注册,但在您的情况下可能不是。
部署应用程序时,我会将其插入App.Config以避免修改machine.Config,但您需要将提供程序放在输出目录中(因此请确保在编译期间复制它)。
无论如何,我在App.config中使用了这段配置(在配置中插入)
缺少商店提供商。
存储提供程序通常是ADO.Net提供程序。通常在machine.config中注册,但在您的情况下可能不是。
部署应用程序时,我会将其插入App.Config以避免修改machine.Config,但您需要将提供程序放在输出目录中(因此请确保在编译期间复制它)。
无论如何,我在App.config中使用了这段配置(在配置中插入)
谢谢!用type=“Npgsql.NpgsqlFactory,Npgsql,Version=2.2.5.0,Culture=neutral,PublicKeyToken=5d8b90d52f46fda7”编辑了您的答案,因为这对我来说很重要。奇怪的事情。我仔细检查了machine.config(32位和64位)文件,提供程序在那里,代码几乎相同。我碰巧没有找到注册的提供程序。这就是为什么在部署中我将其添加到App.Config。要测试machine.config中的注册是否有效,还可以使用DbProviderFactorys类来避免EF层。谢谢!用type=“Npgsql.NpgsqlFactory,Npgsql,Version=2.2.5.0,Culture=neutral,PublicKeyToken=5d8b90d52f46fda7”编辑了您的答案,因为这对我来说很重要。奇怪的事情。我仔细检查了machine.config(32位和64位)文件,提供程序在那里,代码几乎相同。我碰巧没有找到注册的提供程序。这就是为什么在部署中我将其添加到App.Config。要测试machine.config中的注册是否有效,还可以使用DbProviderFactorys类来避免EF层。
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider"
invariant="Npgsql"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
support="FF" />
</DbProviderFactories>
</system.data>