我正在开发一个使用第三方库的应用程序,它使用.NET Framework 3.5(而不是更新版本)。我的应用程序是WPF,我需要使用EntityFramework连接到Postgre SQL数据库。
我google了一下,发现最流行的连接Postgre的方法是使用npgsql提供程序。
所以,我尝试从他们的网站安装npgsql,然后发现exe安装程序只为.NET 4.0和4.5安装了npgsql。它还为Visual Studio安装了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和一些类。
所以问题是,当我尝试在我的应用程序中获取这样的数据时:
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中改变一些东西,但无法弄清楚出了什么问题。
请帮忙。