如何使用CloudSQL代理将EntityFramework核心连接到多个Google CloudSQL实例?

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

我在他们自己的CloudSQL实例中有两个Postgres数据库,在GKE中运行一个.NET Web应用程序。

目标:使用EntityFramework Core将Web应用程序连接到使用单个CloudSQL代理的两个CloudSQL实例。

我跟随this设置并在this S.O.之后对其进行了修改。回答。

每个CloudSQL实例都有一个EF Core DbContext。使用2个环境变量设置上下文连接:

new Context1(
{
optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
});

new Context2(
{
optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
});

环境变量设置为:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"

目前的行为:

Context1正常与CloudSQL instance1交互。

在尝试访问表时,Context2会抛出PostgresException "42P01: relation {my_Table_Name} does not exist."

注意:"my_Table_Name"是CloudSQL instance2中的一个表

这让我相信Context2正在尝试访问CloudSQL instance1而不是instance2。

如何通过SQL代理将Context2指向Cloud SQL实例2?

entity-framework kubernetes google-cloud-sql cloud-sql-proxy
1个回答
1
投票

基本上这个:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"

意味着您只使用两个不同的密码(相同的用户名)连接到完全相同的Cloud SQL实例。但不确定CONNECTION_2如何连接到Cloud SQL instance1。

你会想要这样的东西:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"

并在您的cloud-proxy命令行上(在同一个pod上运行):

-instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433
© www.soinside.com 2019 - 2024. All rights reserved.