NpgsqlException:dotnet ef数据库更新

时间:2020-06-21 15:58:15

标签: c# postgresql .net-core entity-framework-migrations dotnet-cli

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

dotnet ef database update

Npgsql.NpgsqlException(0x80004005):未知消息代码:74 在C:\ projects \ npgsql \ src \ Npgsql \ Util \ PGUtil.cs:line 63中的Npgsql.Util.PGUtil.ValidateBackendMessageCode(BackendMessageCode code)处 在Npgsql.NpgsqlConnector。<> c__DisplayClass160_0。 d.MoveNext()在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:line 894 ---从之前引发异常的位置开始的堆栈结束跟踪--- 在Npgsql.NpgsqlConnector.Authenticate(字符串用户名,NpgsqlTimeout超时,布尔异步)在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.Auth.cs:line 22 在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnector.cs:line 393中的Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout,Boolean async,CancellationToken cancelestToken) 在Npgsql.NpgsqlConnection。<> c__DisplayClass32_0。 d.MoveNext()在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnection.cs:line 241 ---从之前引发异常的位置开始的堆栈结束跟踪--- 在C:\ projects \ npgsql \ src \ Npgsql \ NpgsqlConnection.cs:line 119中的Npgsql.NpgsqlConnection.Open() 在Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() 在Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() 在Microsoft.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操作) 未知消息代码:74

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

1 个答案:

答案 0 :(得分:2)

经过数小时的调查并读取了类似的错误并研究了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;

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