EF Core迁移到PostgreSQL的操作已经超时

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

我是PostgreSQL的新手,我想在Identity Server 4中使用它。我正在使用下一个NuGet包:IdentityServer4,IdentityServer4.EntityFramework和Npgsql.EntityFrameworkCore.PostgreSQL

我正在尝试在PostgreSQL上迁移Identity Server表。我正在修改Startup.cs中的ConfigureServices:

string connectionString = "Server=192.168.1.108; Port=5432; Database=postgres; User Id=postgres;Password=mysecretpassword";
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

services.AddIdentityServer()
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = builder =>
                builder.UseNpgsql(connectionString, action=>
                {
                    action.MigrationsAssembly(migrationsAssembly);
                });
        });

当我运行Add-Migration命令时,我可以看到VS为我准备了所有的迁移信息(我可以看到我需要的所有表),但是当我运行Update-Database命令时,我得到一些奇怪的错误:

Microsoft.EntityFrameworkCore.Infrastructure [10403]实体框架核心2.1.4-rtm-31024使用提供程序'Npgsql.EntityFrameworkCore.PostgreSQL'初始化'ConfigurationDbContext'并带有选项:MigrationsAssembly = MangEx.Users System.TimeoutException:操作已超时。在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs中的Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout):C:\ projects \中Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout,Boolean async,CancellationToken cancellationToken)的第703行npgsql \ src \ Npgsql \ NpgsqlConnector.cs:Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout,Boolean async,CancellationToken cancellationToken)中的第555行,位于C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:第414行,位于Npgsql.NpgsqlConnection 。<> c__DisplayClass32_0。<g__OpenLong | 0> d.MoveNext()在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnection.cs:第270行---从先前位置抛出异常的堆栈跟踪结束---在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnection.cs中的Npgsql.NpgsqlConnection.Open()中:在C:\ projects \ EFCore中的Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()中的第153行。 PG \ src \ EFCore.PG \ Storage \ Internal \ NpgsqlDatabaseCreator.cs:Microsoft.EntityFrameworkCore.Migrations.HistoryRep中的第216行ository.Exists() 位于Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String targetMigration,String contextType)的Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration),位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase。<> c__DisplayClass0_1。 <.ctor> b__0()at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)操作已超时。

我通过Docker运行PostgreSQL并且它是活动容器,而且我正在运行pgAdmin4作为Docker容器,它正在看PostgreSQL容器。

我可能错过了一些微不足道的东西,但正如我所说,我对PostgreSQL完全是新手,所以我无法确定这个错误的原因。

我会很感激任何线索。

c# postgresql docker entity-framework-core identityserver4
1个回答
1
投票

这是我的错。我已经运行了PostgreSQL的docker镜像而没有打开外部世界的端口。当我使用-p 5432:5432运行该映像时,我已设法将Identity Server表迁移到数据库。

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