首先创建代码postgres数据库失败。没有提供密码,但后台需要一个密码(MD5)。

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

我正在构建一个.NET API,但在使用EFCore和Npgsql创建postgres数据库时被卡住了。

目标框架:.Net Core 3.1 EFCore 3.1.4 Npgsql 3.1.3。

我已经创建了初始迁移,但随后运行dotnet ef数据库更新给我这个错误。

Npgsql.NpgsqlException (0x80004005): No password has been provided but the backend requires one (in MD5)
   at Npgsql.NpgsqlConnector.AuthenticateMD5(String username, Byte[] salt, Boolean async)
   at Npgsql.NpgsqlConnector.Authenticate(String username, NpgsqlTimeout timeout, Boolean async)
   at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnection.Open()
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   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.UpdateDatabaseImpl(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

我发现有很多人也有同样的错误,但是没有一个建议的解决方案对我有效,最常见的是说我需要在我的连接字符串中添加Persist Security Info=true;,因为这是.NET Core 3.1中新增加的一个安全功能。

我目前的连接字符串是。

"ConnectionStrings": {
    "(default)": "Server=localhost; Port=5432; Database=xxxxx; Persist Security Info=true; Pooling=true; CommandTimeout=60;"
  },

我也试过添加密码=xxxxx;到连接字符串,因为有人建议这样做。

有谁能帮忙吗?

c# postgresql ef-code-first npgsql ef-core-2.0
1个回答
0
投票
        private static string Host = "mydemoserver.postgres.database.azure.com";
        private static string User = "mylogin@mydemoserver";
        private static string DBname = "mypgsqldb";
        private static string Password = "<server_admin_password>";
        private static string Port = "5432";

        static void Main(string[] args)
        {
            // Build connection string using parameters from portal
            //
            string connString =
                String.Format(
                    "Server={0};Username={1};Database={2};Port={3};Password={4};SSLMode=Prefer",
                    Host,
                    User,
                    DBname,
                    Port,
                    Password);
       }
© www.soinside.com 2019 - 2024. All rights reserved.