Как подключить EntityFramework Core к нескольким экземплярам Google CloudSQL с помощью CloudSQL Proxy? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть 2 базы данных Postgres, каждая в своем собственном экземпляре CloudSQL, и веб-приложение .NET, работающее в GKE.

Цель: подключить веб-приложение, использующее EntityFramework Core, к обоим экземплярам 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.

Как я могу указать Context2 через SQL Proxy на CloudSQL instance2?

1 Ответ

0 голосов
/ 09 ноября 2018

В основном это:

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"

и в командной строке вашего облачного прокси (работающего на том же модуле):

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