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



我有两个Postgres数据库,每个数据库都有自己的CloudSQL实例和一个。NET web应用程序在GKE中运行。

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

我遵循了这个设置,并根据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指向CloudSQL instance2?

基本上这是:

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"

表示您正在使用两个不同的密码(相同的用户名(连接到完全相同的云SQL实例。但不确定CONNECTION_2是如何连接到Cloud SQL实例1的。

你可能想要这样的东西:

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"

和您的云代理命令行上(在同一个pod上运行(:

-instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433

相关内容

  • 没有找到相关文章

最新更新