首页 > 解决方案 > 为 Web Deploy 设置数据库提供程序

问题描述

我在具有 .NET Core 2.0 和 PostgreSql 数据库的项目中使用 VS 2017。Npgsql 用作数据库提供程序。

这是 DbContext 的配置方式:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
          options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"),
             b => b.MigrationsAssembly("MyAssembly")));

        ...
    }

这是部署的配置 配置 当 Web Deploy 尝试在发布过程中应用迁移时,它会收到错误:

错误:Web 部署任务失败。

值 'User ID=postgres;Host=localhost;Port=5432;Database=MyDatabase' 不是有效的连接字符串或绝对路径。了解更多信息:http: //go.microsoft.com/fwlink/ ?LinkId=221672#ERROR_INVALID_CONNECTION_STRING 。

不支持关键字:“主机”。在 System.Data.SqlClient.SqlConnectionStringBuilder.GetIndex(String 关键字) 在 System.Data.SqlClient.SqlConnectionStringBuilder.set_Item(String 关键字,对象值) 在 System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value) 在 System.Data。 SqlClient.SqlConnectionStringBuilder..ctor(String connectionString) 在 Microsoft.Web.Deployment.ConnectionStringMatcher.RemoveExtraSlashFromDataSourceName(String connectionString) 在 Microsoft.Web.Deployment.ConnectionStringMatcher.GetStandardConnectionString(String userConnectionString, Boolean isSqlCE) 在 Microsoft.Web.Deployment.SqlInfo。 GetBuilder(String connectionString, String errorMessageFormat) 发布部署失败。

似乎 Web Deploy 尝试通过默认的 SqlServer 数据库提供程序解析连接字符串。如何将数据库提供程序切换到 Npgsql 进行部署?

标签: c#postgresql.net-corewebdeploy

解决方案


您是否使用 'User ID=postgres;Host=localhost;Port=5432;Database=MyDatabase' 作为连接字符串?

我认为问题在于您编写的“用户 ID”中有一个空格,并且您也没有在连接字符串中包含密码。

填写密码后,您可以尝试此行吗?

"DefaultConnection": "Server=localhost;Port=5432;Database=MyDatabase;User=postgres;Password=YourPassword"

推荐阅读