Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 实体框架连接到postgres失败:“;基础提供程序在打开时失败";_Postgresql_Entity Framework_Azure Functions_Npgsql - Fatal编程技术网

Postgresql 实体框架连接到postgres失败:“;基础提供程序在打开时失败";

Postgresql 实体框架连接到postgres失败:“;基础提供程序在打开时失败";,postgresql,entity-framework,azure-functions,npgsql,Postgresql,Entity Framework,Azure Functions,Npgsql,我正在本地环境中测试一个Azure函数项目,使用Npgsql作为postgres的驱动程序,连接字符串在local.settings.json而不是App.config中定义 当我将Npgsql设置为实体框架的提供程序并将默认连接工厂设置为NpgsqlConnectionFactory时,在DbContext中读取DbSet会产生以下错误: 基础提供程序在打开时失败。->建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及S

我正在本地环境中测试一个Azure函数项目,使用Npgsql作为postgres的驱动程序,连接字符串在local.settings.json而不是App.config中定义

当我将Npgsql设置为实体框架的提供程序并将默认连接工厂设置为
NpgsqlConnectionFactory
时,在
DbContext
中读取
DbSet
会产生以下错误:

基础提供程序在打开时失败。->建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40-无法打开到SQL Server的连接)->系统找不到指定的文件

这是我的
DbContext

public partial class PostgresContext : DbContext
{
    public PostgresContext() : base("postgres-key")
    {

    }
}

public class NpgSqlConfiguration:DbConfiguration
{
    public NpgSqlConfiguration()
    {
        SetProviderFactory("Npgsql",NpgsqlFactory.Instance);
        SetDefaultConnectionFactory(new NpgsqlConnectionFactory());
    }
}
这是我的连接字符串:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": ""
  },
  "ConnectionStrings": {
    "postgres-key": "Server=127.0.0.1;Port=5432;Database=postgres;User Id=postgres;Password=postgres;"
  }
}
我尝试用localhost替换连接字符串的服务器部分,检查postgres 64服务是否正在运行,检查端口5432是否打开,检查Entity Framework是否与
local.settings.json一起工作

我能够继续前进的唯一方法是为手动数据库查询创建自己的
NpgsqlConnection
。我正在尽可能地避免计划B,并将感谢任何帮助使ORM工作


更新:使用.net framework 4.7.1。。我不熟悉.net,但是,根据Npgsql的官方文档,连接字符串如下所示:

"Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase"
而你的是:

"Server=127.0.0.1;Port=5432;Database=postgres;User Id=postgres;Password=postgres;"
为什么不使用相同的参数?例如:

"Host=127.0.0.1;Username=postgres;Password=postgres;Database=postgres"
请参阅此链接:

请确保它能监听所有接口或lo接口,您可以尝试“


为了确保连接性正常运行

最近,由于帮助人员的激增,我重新审视了这个问题。当我意识到我忽略了
DbConfiguration.SetProviderServices()时,我设法让它正常运行
来自dbconfiguration继承器。npgsql文档非常糟糕,因为它没有提到这是必需的

public class NpgSqlConfiguration : DbConfiguration
{
    public NpgSqlConfiguration()
    {
        SetProviderFactory("Npgsql", NpgsqlFactory.Instance);
        SetProviderServices("Npgsql", provider: NpgsqlServices.Instance);
        SetDefaultConnectionFactory(new NpgsqlConnectionFactory());
    }
}
这是我的完整副本(如果将来有人遇到类似问题):

你的数据库是在Azure中配置的吗?不是,我只是在本地主机数据库上测试。你确定你的数据库正在运行并且端口
5432
是打开的吗?我检查了postgres x64服务正在运行,并在powershell中运行了
netstat-an
,以确定端口状态。它具有侦听状态。另外,我应该添加,我可以访问他使用相同的连接字符串从python网站的调试测试中删除数据库。
public class NpgSqlConfiguration : DbConfiguration
{
    public NpgSqlConfiguration()
    {
        SetProviderFactory("Npgsql", NpgsqlFactory.Instance);
        SetProviderServices("Npgsql", provider: NpgsqlServices.Instance);
        SetDefaultConnectionFactory(new NpgsqlConnectionFactory());
    }
}