不支持关键字:在 POSTGRESQL 上迁移 ef 时出现“主机”错误

问题描述 投票:0回答:3

目前我正在.netcore 2.0 上使用MVC6 进行数据库迁移。这是我要迁移 POSTGRESQL 的链接:https://damienbod.com/2016/01/11/asp-net-5-with-postgresql-and-entity-framework-7/

在我的 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上看到的错误。

有人可以告诉我这个吗?

编辑后的完整堆栈跟踪在这里:

    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'.

谢谢你 青蛙

asp.net-mvc postgresql .net-core database-migration
3个回答
6
投票

确保实现

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);
    }
}

5
投票

请确保您没有使用:

SQL Server connection (using (IDbConnection pgcon = new SqlConnection(con))) 

而不是:

PostgresSQL connection( using (IDbConnection pgcon = new NpgsqlConnection(con)))

我以前也遇到过这种情况...


3
投票

我也有同样的问题。经过一番搜索,没有运气,我想通了。关键字“host”位于您的连接字符串中。您应该将其替换为服务器。

例如: 主机=127.0.0.1 应该是服务器=127.0.0.1

© www.soinside.com 2019 - 2024. All rights reserved.