#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 в проект. Это помогло мне решить аналогичную проблему.