我正在尝试使用EF6和NpgSQL 3.x设置项目
我采取了以下步骤:
使用Nuget安装NpgSQL EntityFramework6包
当我尝试连接数据库时,我收到错误:
"Keyword not supported: 'port'."
指的是连接字符串中的端口设置 如果我删除“端口”连接失败,错误:
"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"
错误消息似乎是尝试使用SQL服务器协议而不是postgres进行连接。我需要采取其他步骤来进行此设置吗?
文档中的大多数.config文件示例都显示为过时,所以我想知道是否需要在某处手动添加设置。
如果有人使用此设置,您可以共享您的.config文件,谢谢。
答案 0 :(得分:0)
你是对的:"它正在尝试使用SQL服务器协议进行连接而不是postgres",因为它是默认的提供商。
您必须将Npgsql提供程序添加到web.config中的DbProviderFactories和EF提供程序,然后将连接字符串链接到该提供程序(请参阅providerName
),以便实体框架可以连接到postgresql:
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>
<connectionStrings>
<add name="CS" connectionString="Server=127.0.0.1;Port=5432;Database=MYDB;User Id=postgres;Password=mypass" providerName="Npgsql" />
</connectionStrings>