Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Asp.net mvc 不支持关键字:';主机';在POSTGRESQL上迁移ef时出错_Asp.net Mvc_Postgresql_.net Core_Database Migration - Fatal编程技术网

Asp.net mvc 不支持关键字:';主机';在POSTGRESQL上迁移ef时出错

Asp.net mvc 不支持关键字:';主机';在POSTGRESQL上迁移ef时出错,asp.net-mvc,postgresql,.net-core,database-migration,Asp.net Mvc,Postgresql,.net Core,Database Migration,目前,我正在.netcore2.0上使用MVC6进行数据库迁移。以下是我要迁移POSTGRESQL的链接: 在my appsettings.json中: { "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "ConnectionStrings": { "DataAccessPostgreSqlProvider": "User I

目前,我正在.netcore2.0上使用MVC6进行数据库迁移。以下是我要迁移POSTGRESQL的链接:

在my appsettings.json中:

    {
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "DataAccessPostgreSqlProvider": "User ID=ids;Password=****;Host=127.0.0.1;Port=5432;Database=IDS;Pooling=true;"
  }
}
我使用以下命令开始迁移:

dotnet ef migrations add testPG
它是成功的,没有任何错误,但是当我试图在命令提示符下运行以下命令时,错误出现了

dotnet ef database update
这是我在cmd上看到的错误

有人能告诉我这件事吗

编辑的完整stacktrace位于此处:

    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\Richard\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
System.ArgumentException: Keyword not supported: 'hostaddr'.
   at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at System.Data.SqlClient.SqlConnection..ctor(String connectionString)
   at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection.CreateDbConnection()
   at Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
   at Microsoft.EntityFrameworkCore.Internal.RelationalLoggerExtensions.MigrateUsingConnection(IDiagnosticsLogger`1 diagnostics, IMigrator migrator, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Keyword not supported: 'hostaddr'.
info:Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
用户配置文件可用。使用“C:\Users\Richard\AppData\Local\ASP.NET\DataProtection Keys”作为密钥存储库,并使用Windows DPAPI对静态密钥进行加密。
System.ArgumentException:不支持关键字:“hostaddr”。
位于System.Data.Common.DbConnectionOptions.ParseInternal(字典'2 parsetable,字符串connectionString,布尔构建链,字典'2同义词)
位于System.Data.Common.DbConnectionOptions..ctor(字符串连接字符串,字典`2同义词)
位于System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
位于System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString,DbConnectionOptions previous)
位于System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey、DbConnectionPoolGroupOptions、DbConnectionOptions和userConnectionOptions)
位于System.Data.SqlClient.SqlConnection.ConnectionString_集合(DbConnectionPoolKey)
位于System.Data.SqlClient.SqlConnection.set_ConnectionString(字符串值)
位于System.Data.SqlClient.SqlConnection..ctor(字符串连接字符串)
在Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection.CreateDbConnection()中
在Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value()中
在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()中
位于Microsoft.EntityFrameworkCore.Internal.RelationalLoggerExtensions.MigrateUsingConnection(IDiagnosticsLogger`1诊断、IMigrator migrator、IRelationalConnection连接)
位于Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串targetMigration)
位于Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration,String contextType)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_1.b__0()中
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作)
不支持关键字:“hostaddr”。
谢谢
Frog

确保实现
IDesignTimeDbContextFactory
的类包含正确的PostgreSQL数据库定义。注意这一行
builder.UseNpgsql(connectionString)此处:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<DomainModelPostgreSqlContext>
{
    public DomainModelPostgreSqlContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<DomainModelPostgreSqlContext>();
        var connectionString = configuration.GetConnectionString("DataAccessPostgreSqlProvider");
        builder.UseNpgsql(connectionString);
        return new DomainModelPostgreSqlContext(builder.Options);
    }
}
公共类DesignTimeDbContextFactory:IDesignTimeDbContextFactory
{
public DomainModelPostgreSqlContext CreateDbContext(字符串[]args)
{
IConfigurationRoot配置=新配置生成器()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”)
.Build();
var builder=new DbContextOptionsBuilder();
var connectionString=configuration.GetConnectionString(“DataAccessPostgreSqlProvider”);
builder.UseNpgsql(connectionString);
返回新的DomainModelPostgreSqlContext(builder.Options);
}
}

不理解为什么会出现错误,但您可以尝试使用
hostaddr
而不是
host
hostaddr
是特定于ip地址的,它不会像
host
那样进行名称查找。嗨,Eelke,谢谢你的建议。但我得到了错误“关键字不受支持:”hostaddr“。我开始认为连接字符串传递到了错误的类。你能把问题中错误之前的完整stacktrace放进去吗?请复制粘贴文本,不要发布屏幕截图。已使用stacktrace编辑。感谢您基于stacktrace中的错误,conn字符串似乎是使用位于
C:\Users\Richard\AppData\Local\ASP.NET\DataProtection Keys
中的文件获取的,而不是您的appsettings.json文件。