我在自己的CloudSQL实例中有2个Postgres数据库,并在GKE中运行一个.NET Web应用程序。
目标:使用一个CloudSQL代理将利用EntityFramework Core的Web应用连接到两个CloudSQL实例。
我遵循this设置并在this S.O之后对其进行了修改。回答。
每个CloudSQL实例都有一个EF Core DbContext。
使用两个环境变量设置上下文连接:
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?
最佳答案
基本上是这样的:
表示您仅使用两个不同的密码(相同的用户名)连接到完全相同的Cloud SQL实例。虽然不确定CONNECTION_2甚至如何连接到Cloud SQL instance1。
您可能想要这样的东西:
并在您的cloud-proxy命令行上(在同一pod上运行):
-instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433
关于entity-framework - 如何使用CloudSQL代理将EntityFramework Core连接到多个Google CloudSQL实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53216527/