问题:NpgsqlException:dotnet ef 数据库更新上的“未知消息代码:74”

当我第一次尝试更新(从模型构建表)PostgreSQL 数据库时,我发现了这个异常:

dotnet ef database update

Npgsql.NpgsqlException (0x80004005):未知消息代码:C:\projects\npgsql\src\Npgsql\Util\PGUtil.cs 中 Npgsql.Util.PGUtil.ValidateBackendMessageCode(BackendMessageCode 代码)的 74:Npgsql.NpgsqlConnector 的第 63 行。 <>c__DisplayClass160_0.<g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 894 --- 堆栈跟踪结束以前抛出异常的位置 --- 在 C:\projects\npgsql\src\Npgsql\NpgsqlConnector.Auth.cs:Npgsql.NpgsqlConnector 的第 22 行中的 Npgsql.NpgsqlConnector.Authenticate(String username, NpgsqlTimeout timeout, Boolean async)。在 C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs 中打开(NpgsqlTimeout 超时,布尔异步,CancellationToken cancelToken):Npgsql.NpgsqlConnection 的第 393 行。<>c__DisplayClass32_0.<g__OpenLong |0>d.MoveNext() 在 C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 241 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 Npgsql.NpgsqlConnection.Open( ) 在 C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:第 119 行,位于 Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() 的 Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() 中。 EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) 在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType) 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String contextType) 在Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) 未知消息代码: 74

不幸的是,我找不到有关此异常的任何线索,并且正如您所见,该异常完全不清楚。

解答

经过数小时的调查和阅读类似错误并研究了PGUtil.cs的源代码,我怀疑是通信问题。

和宾果游戏。问题的根源是我的同事提交的错误的端口号

public class IdentityResourceContextFactory : IDesignTimeDbContextFactory<IdentityResourceContext>
    {
        public IdentityResourceContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<IdentityResourceContext>();
            optionsBuilder.UseNpgsql("Username=postgres;Password=p@$$word;Host=localhost;Port=3306;Database=Identity;");

            return new IdentityResourceContext(optionsBuilder.Options);
        }
    }

当我将端口号更改为正确的端口号时,一切顺利:

Username=postgres;Password=p@$$word;Host=localhost;Port=5432;Database=Identity;

我知道它可能与异常消息完全无关,因此我在这里分享它。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐