.NET Core 5 Postgres «Npgsql.EntityFrameworkCore.PostgreSQL» с параметрами: Нет

#c# #postgresql #.net-core #docker-compose

Вопрос:

Когда я запускаю миграцию dotnet ef add, она добавляет миграцию, но показывает небольшую ошибку (такую же, как строка со стрелкой), но если я запускаю базу данных обновлений или пытаюсь удалить или даже запустить api, она регистрирует меня и не может идти дальше…

 watch : Started
Building...
fail: API.Program[0]
      An error occured during migration
      Npgsql.NpgsqlException (0x80004005): Exception while reading from stream
       ---> System.IO.EndOfStreamException: Attempted to read past the end of the stream.
         at Npgsql.NpgsqlReadBuffer.<Ensure>g__EnsureLong|40_0(NpgsqlReadBuffer buffer, Int32 count, Boolean async, Boolean readingNotifications)
         at Npgsql.NpgsqlReadBuffer.<Ensure>g__EnsureLong|40_0(NpgsqlReadBuffer buffer, Int32 count, Boolean async, Boolean readingNotifications)
         at Npgsql.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|194_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
         at Npgsql.NpgsqlConnector.Authenticate(String username, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
         at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
         at Npgsql.NpgsqlConnection.<>c__DisplayClass41_0.<<Open>g__OpenAsync|0>d.MoveNext()
      --- End of stack trace from previous location ---
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected)
         at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(Boolean async, CancellationToken cancellationToken)
         at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(Boolean async, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.ExistsAsync(CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateAsync(String targetMigration, CancellationToken cancellationToken)
         at API.Program.Main(String[] args) in /Users/6100842/Desktop/Personal/EcoCampo/ecoApi/API/Program.cs:line 30
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5024
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5025
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /Users/6100842/Desktop/Personal/EcoCampo/ecoApi/API
 

я использую свои строки подключения следующим образом:

 "ConnectionStrings": {
    "DefaultConnection": "Server=localhost; Port=54321;User Id=appuser; Password=secret; Database=ecocampo",
    "IdentityConnection": "Server=localhost; Port=54321;User Id=appuser; Password=secret; Database=identity",
    "Redis": "localhost"
  },
 

Обнаружил, что эта проблема возникает, когда я изменяю это:

 services.AddDbContext<StoreContext>(x => {
                x.UseSqlite(_configuration.GetConnectionString("DefaultConnection"));
            });
 

К этому:

 services.AddDbContext<StoreContext>(x => {
                x.UseNpgsql(_configuration.GetConnectionString("DefaultConnection"));
            });
 

Комментарии:

1. Попробуйте добавить KeepAlive = 300 в строки подключения.

2. Вы можете попробовать неявно добавить пакет Npgsql в проект. Это помогло мне решить аналогичную проблему.