“TimeoutException:在使用 Npgsql 和 PostgreSQL 进行“dotnet ef 数据库更新”期间从流读取时出现异常”

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

我正在尝试在 .NET 应用程序中使用 Entity Framework Core 更新我的 PostgreSQL 数据库。但是,当我运行命令

dotnet ef database update
时,我得到一个 TimeoutException ,并带有以下堆栈跟踪。

错误消息和堆栈跟踪:

构建开始...
构建成功。
Npgsql.NpgsqlException (0x80004005):从流读取时出现异常
 ---> System.TimeoutException:读取尝试期间超时
   在 Npgsql.Internal.NpgsqlReadBuffer.g__EnsureLong|55_0(NpgsqlReadBuffer 缓冲区、Int32 计数、布尔异步、布尔读取通知)
   在 System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 令牌)
   在 Npgsql.Internal.NpgsqlConnector.RawOpen(SslMode sslMode,NpgsqlTimeout 超时,布尔异步,CancellationToken CancelToken,布尔 isFirstAttempt)
   在 Npgsql.Internal.NpgsqlConnector.g__OpenCore|213_1(NpgsqlConnector conn、SslMode sslMode、NpgsqlTimeout 超时、布尔异步、CancellationToken CancelToken、布尔 isFirstAttempt)
   在 Npgsql.Internal.NpgsqlConnector.Open(NpgsqlTimeout 超时,布尔异步,CancellationToken 取消令牌)
   在 Npgsql.UnpooledDataSource.Get(NpgsqlConnection conn、NpgsqlTimeout 超时、布尔异步、CancellationToken CancellationToken)
   在 Npgsql.NpgsqlConnection.g__OpenAsync|42_0(布尔异步,CancellationToken CancellationToken)
   在 Npgsql.NpgsqlConnection.Open()
   在 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(布尔错误预期)
   在 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(布尔错误预期)
   在 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误预期)
   在 Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(布尔异步,CancellationToken取消令牌)
   在 Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(布尔异步,CancellationToken取消令牌)
   在 Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
   在 Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   在 Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()
   在 Npgsql.EntityFrameworkCore.PostgreSQL.Migrations.Internal.NpgsqlMigrator.Migrate(字符串 targetMigration)
   在Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(字符串targetMigration,字符串connectionString,字符串contextType)  
   在Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(字符串targetMigration,字符串connectionString,字符串contextType)
   在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_0.b__0()
   在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作操作)
从流读取时出现异常

连接字符串的代码示例:

{
  "ConnectionStrings": {
   "DefaultConnection" : "Host=MyIP; Port=6060; Database=test; Username=user; Password=password;"

  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

我使用的版本:

  • PostgreSQL:15.7
  • Npgsql.EntityFrameworkCore.PostgreSQL:8.0.10
  • .NET SDK版本:8.0.403
  • 操作系统:Windows 10

我尝试过的事情:

  • 检查了连接字符串 – 似乎是正确的。
  • Ping PostgreSQL 服务器 – 它响应。 [虽然使用“ping MyIP”命令,它显示“请求超时”,但我尝试使用“Test-NetConnection (PowerShell)”,它显示“TcpTestSucceeded:True”,所以我猜没有网络问题]
  • SSL 设置 – 尝试使用和不使用 SSL。
  • 增加命令超时 – 在连接字符串中尝试使用 CommandTimeout=300。
c# asp.net-mvc postgresql timeout npgsql
1个回答
0
投票

通常,超时来自于尝试连接到 sql 服务器。您的连接字符串是否包含所有必需的关键字? (例如,我看到“服务器”而不是“主机”和“端口”,“初始目录”而不是“数据库”)

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