Entity Framework 使用 dockerized postgresql 镜像的核心迁移。没有这样的主机是已知的异常
Entity Framework Core migrations using dockerized postgresql image. No such host is known exception
在我的 aspnet.core 项目中,我想使用我的 dockerized postgresql 镜像。
容器 运行ning 正确。 (我正在使用 Windows 但在 ubuntu18.04 服务器上使用服务器 运行ning)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a01980eb90bc postgres:11.4 "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp pg
appsettings.json 文件看起来像
"ConnectionStrings": {
"LibvirtConnection": "User ID =postgres;Password=*****;Server=185.22.98.7:5432;Port=5432;Database=libvirt;Integrated Security=true;Pooling=true;"
},
启动class看起来像
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql().AddDbContext<AppDbContext>(opt =>
opt.UseNpgsql(Configuration.GetConnectionString("LibvirtConnection")));
}
我在尝试 运行 dotnet ef 数据库更新时出现异常
dotnet ef database update
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.2.6-servicing-10079 initialized 'AppDbContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
System.Net.Sockets.SocketException (11001): No such host is known
at System.Net.Dns.InternalGetHostByName(String hostName)
at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 663
at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 555
at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 414
at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 273
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlConnection.Open() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 153
at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\S at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\Storage\Internal\NpgsqlDatabaseCreator.cs:line 190
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.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
No such host is known
原因是我将我的服务器和端口组合在一起
之前:
Server=185.22.98.7:5432;Port=5432
之后:
Server=185.22.98.7;Port=5432
System.Net.Sockets.SocketException (11001): No such host is known
仔细检查您的连接字符串是否有错字!!! Copy/paste 信息!
我不确定 OP 的连接字符串,根据文档,它的格式如下:
Host=dbServerName.random.ap-southeast-2.rds.amazonaws.com;Port=5432;Database=postgres;Username=admin;Password=NotRealPassword
REF:
https://www.npgsql.org/doc/connection-string-parameters.html
在我的 aspnet.core 项目中,我想使用我的 dockerized postgresql 镜像。
容器 运行ning 正确。 (我正在使用 Windows 但在 ubuntu18.04 服务器上使用服务器 运行ning)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a01980eb90bc postgres:11.4 "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp pg
appsettings.json 文件看起来像
"ConnectionStrings": {
"LibvirtConnection": "User ID =postgres;Password=*****;Server=185.22.98.7:5432;Port=5432;Database=libvirt;Integrated Security=true;Pooling=true;"
},
启动class看起来像
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddEntityFrameworkNpgsql().AddDbContext<AppDbContext>(opt =>
opt.UseNpgsql(Configuration.GetConnectionString("LibvirtConnection")));
}
我在尝试 运行 dotnet ef 数据库更新时出现异常
dotnet ef database update
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.2.6-servicing-10079 initialized 'AppDbContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
System.Net.Sockets.SocketException (11001): No such host is known
at System.Net.Dns.InternalGetHostByName(String hostName)
at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 663
at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 555
at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 414
at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 273
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlConnection.Open() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 153
at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\S at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\Storage\Internal\NpgsqlDatabaseCreator.cs:line 190
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.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
No such host is known
原因是我将我的服务器和端口组合在一起
之前:
Server=185.22.98.7:5432;Port=5432
之后:
Server=185.22.98.7;Port=5432
System.Net.Sockets.SocketException (11001): No such host is known
仔细检查您的连接字符串是否有错字!!! Copy/paste 信息!
我不确定 OP 的连接字符串,根据文档,它的格式如下:
Host=dbServerName.random.ap-southeast-2.rds.amazonaws.com;Port=5432;Database=postgres;Username=admin;Password=NotRealPassword
REF: https://www.npgsql.org/doc/connection-string-parameters.html