我在使用.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部署任务失败。
值&#39;用户ID = postgres; Host = localhost; Port = 5432; Database = MyDatabase&#39;不是有效的连接字符串或绝对路径。请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INVALID_CONNECTION_STRING了解详情。
不支持关键字:&#39; host&#39;。 at System.Data.SqlClient.SqlConnectionStringBuilder.GetIndex(String keyword) at System.Data.SqlClient.SqlConnectionStringBuilder.set_Item(String keyword,Object value) at 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进行部署?
答案 0 :(得分:0)
您是否使用'User ID = postgres; Host = localhost; Port = 5432; Database = MyDatabase'作为您的连接字符串?
我认为问题在于您编写了“用户ID”,其中包含空格,并且您也没有在连接字符串中包含密码。
在填写密码后,您可以尝试使用此行吗?
"DefaultConnection": "Server=localhost;Port=5432;Database=MyDatabase;User=postgres;Password=YourPassword"