2017-10-07 44 views
1

遷移EF目前我做的.netcore 2.0使用MVC6數據庫遷移「主機」的錯誤。這裏要說的是我下面的鏈接,遷移POSTGRESQL:https://damienbod.com/2016/01/11/asp-net-5-with-postgresql-and-entity-framework-7/關鍵字不支持:當在PostgreSQL上

在我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上看到的錯誤。

enter image description here

可有人請賜教這樣做呢?

編輯全堆棧跟蹤是在這裏:

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

感謝您 青蛙

+0

不明白爲什麼會出現這個錯誤,但你可以嘗試使用'hostaddr'而不是'host'。 'hostaddr'是特定於ip地址的,它不會像'host'那樣進行名稱查找。 – Eelke

+0

Eelke您好,感謝您的建議。但我得到了錯誤「不支持關鍵字:‘hostaddr與之’ –

+0

我開始想連接字符串傳遞到錯誤的類,你可以把完整的堆棧跟蹤這是你的問題的錯誤之前,請複製粘貼?文本,不張貼截圖。 – Eelke

回答

1

確保它實現IDesignTimeDbContextFactory類包含PostgreSQL的正確的DB定義。請注意這條線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); 
    } 
}