Две строки подключения для локального и хост-сервера - PullRequest
0 голосов
/ 24 февраля 2019

Я хотел бы спросить, есть ли способ заставить ASP.NET Core 2 выбирать разные строки подключения.

Весьма раздражает, когда я каждый раз меняю строку подключения в файле appsettings.json.Я публикую свой веб-сайт на хостинг-сервере ..

Я использую этот код для получения строки подключения.

 services.AddDbContext<AppIdentityDbContext>(options => 
     options.UseSqlServer(Configuration["Data:WebDataBase:ConnectionString"]));

Возможно, есть простой способ, но я думаю об использовании оператора ifв моем Startup.cs:

if (local) {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase1:ConnectionString"]));
}
else {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase2:ConnectionString"]));
}

Но как мне установить эту переменную local, является ли сервер моим локальным компьютером или сервером живого хостинга?

"Data": {
  "WebDataBase1": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  },

  "WebDataBase2": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}

1 Ответ

0 голосов
/ 24 февраля 2019

Конфигурация конкретной среды не должна указываться в коде.ASP.NET Core имеет механизм для этого, который позволяет вам менять конфигурацию в зависимости от того, в какой среде вы работаете.

При разработке приложения вы обычно работаете в среде Development.При развертывании приложения для работы по умолчанию используется среда Production.Но если у вас есть другие среды, вы можете полностью создать новые имена для них и иметь конкретные конфигурации для них.Все это объясняется в главе Окружения документации

Что позволяет сделать среда - это создать несколько appsettings.json файлов.Ядро ASP.NET по умолчанию поставляется с двумя файлами: appsettings.json и appsettings.Development.json.

Первый должен содержать конфигурацию, не зависящую от среды;вещи, которые относятся ко всем средам.Последний файл содержит конфигурацию, относящуюся к разработке, и, например, настраивает уровень ведения журнала, чтобы вы могли получить больше информации во время разработки.Вы также можете использовать эти файлы, чтобы указать строку подключения по умолчанию в appsettings.json и перезаписать ее для разработки в appsettings.Development.json.

Кроме того, файл конфигурации следует очень простому шаблону: appsettings.<Environment>.json.Поэтому, если вы работаете в среде Production, файл с именем appsettings.Production.json будет загружен, если он существует.Этот механизм позволяет настраивать все среды по-разному, не прибегая к обнаружению в вашем коде.

Кроме того, существует также концепция пользовательских секретов во время разработки.Они предназначены для конфигураций, специфичных для разработки, которые применимы только к себе, но не относятся, например, к другим членам вашей команды.Это в основном конфигурация для каждой машины, которая позволяет перезаписывать как appsettings.json, так и appsettings.Development.json.Это описано в главе Секреты пользователя .

. Лучше всего избегать использования строк подключения в файлах конфигурации, так как вы хотите, чтобы люди, у которых есть доступ к вашим файлам конфигурации(например, через ваш исходный код) может знать пароли к вашей базе данных.В этом случае вы можете использовать другие механизмы, например переменные среды , которые являются локальными для процесса.


В вашем случае, когда вы просто используете интегрированную защиту, и как таковуюполагаться на учетные данные текущего пользователя, это не так уж много проблем.Единственное, что вы пропускаете - это имя базы данных.- Таким образом, вы определенно можете начать с помещения строк подключения в файлы appsettings.

Так, например, именно так вы бы сконфигурировали контекст вашей базы данных в пределах ConfigureServices вашего * стартапа:

services.AddDbContext<AppIdentityDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("WebDataBase"));

Ваш appsettings.Development.json будет выглядеть так:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  }
}

А ваш appsettings.Production.json будет выглядеть так:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}
...