第一次进行数据库更新时出现错误
System.Net.Sockets.SocketException(10061):无法建立连接,因为目标计算机主动拒绝了它。 在Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout超时) 在Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout超时,布尔异步,CancellationToken cancelledToken) 在Npgsql.NpgsqlConnector.Open(NpgsqlTimeout超时,布尔异步,CancellationToken cancelToken) 在Npgsql.NpgsqlConnection。<> c__DisplayClass32_0。
d.MoveNext() ---从之前引发异常的位置开始的堆栈结束跟踪--- 在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.OperationBase.Execute(Action操作) 无法建立连接,因为目标计算机主动拒绝了该连接。
我正在将Docker Toolbox用于低端PC。我用以下命令运行了postgres容器:
docker run --name pg -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres;
为了将EF Core连接到pgsql,我使用了Npgsql nuget包和connectionString
"Server=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
接下来,我在MyDbContext文件中创建
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
}
public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{
public MyDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionsBuilder.UseNpgsql("Server=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password");
return new MyDbContext(optionsBuilder.Options);
}
}
之后,我在启动类中添加了dbContext
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddDbContext<Models.MyDbContext>();
任何人都可以帮助我,或者建议我可能错过的事情吗?
答案 0 :(得分:0)
对于您的情况,从主机启动.net核心项目时,Server=127.0.0.1
将起作用。
我假设您是从docker启动.net核心项目的,如果是这样,则需要遵循belwo步骤来连接两个容器。
使用PostgreSQL容器名称pg
更改连接字符串,例如
"Server=pg;Port=5432;Database=postgres;Username=postgres;Password=password"
在运行
之类的.net内核时指定--link=pg
docker run -it -p 8585:80 --link=pg dockerpostgres