Правильное хранение строк подключения БД в переменных среды ASP. Net MVC Приложения - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь переместить мои 2 строки подключения к базе данных в переменные среды из соображений безопасности. Все работает нормально, когда я включаю 2 строки подключения в web.config следующим образом:

<connectionStrings>
    <clear />
    <add name="DefaultConnection" connectionString="Data Source=xxxxxx" providerName="System.Data.SqlClient" />
    <add name="RDSContext" connectionString="Data Source=xxxxxx" providerName="System.Data.SqlClient" />
 </connectionStrings>

Затем я удалил 2 строки подключения из web.config и создал 2 переменные среды следующим образом:

setx CUSTOMCONNSTR_DefaultConnection "Data Source=xxxxx" setx CUSTOMCONNSTR_RDSContext "Data Source=xxxxx"

Хотя теперь я получаю следующую ошибку при запуске IIS и посещении веб-приложения

Server Error in '/' Application. Cannot attach the file 'C:\Users\xxx\xxx\App_Data\BookingSystem.Models.RDSContext.mdf' as database 'BookingSystem.Models.RDSContext'.

Может кто-нибудь сказать мне, что я я делаю неправильно?

1 Ответ

0 голосов
/ 25 апреля 2020

Простое именование переменной среды определенным образом не означает, что MVC подберет их. Возможно, вы предполагаете, что происходит немного больше магии c, чем на самом деле.

Когда вы делаете ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString, вы извлекаете только строку подключения из файла web.config или machine.config, если Вы случайно определили это там. Нет ничего, что могло бы сказать вашему приложению, чтобы оно захватывало его откуда-либо еще.

Вместо этого вы можете рассмотреть возможность создания класса для представления вашей конфигурации:

public class MyApplicationDatabaseConfiguration
{
    public string ConnectionString { get; set; }
}

Любой класс, которому необходимо получить это соединение Строка может сделать это, в зависимости от экземпляра этой MyApplicationDatabaseConfiguration.

public class MyDatabaseRepository
{
    readonly MyApplicationDatabaseConfiguration _dbConfig;

    public MyDatabaseRepository(MyApplicationDatabaseConfiguration dbConfig)
    {
        _dbConfig = dbConfig;
    }

    public void DoSomethingWithTheDatabase()
    {
         using(var connection = new SqlConnection(_dbConfig.Connectionstring))
         {
             //now you can use the connection
         }
    }
}

Затем вы можете загрузить свою конфигурацию так, как вам нравится. Пример:

MyApplicationDatabaseConfiguration dbConfig = new MyApplicationDatabaseConfiguration();
dbConfig.ConnectionString = Environment.GetEnvironmentVariable("MyApplication_MyConnectionString");

Теперь MyDatabaseRepository не имеет значения как вы загружаете конфигурацию базы данных, она просто говорит: «Мне нужна конфигурация базы данных». Это очень мощный инструмент, он позволяет вам изменить конфигурацию, просто изменив строку кода. Нужно вернуться к использованию web.config? Это так же просто, как dbConfig.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;

Microsoft сделала еще один шаг вперед в библиотеке Microsoft.Extensions.Configuration, которая предназначена для. NET Ядро, но нацелено на. NET Стандарт, поэтому Вы можете использовать его в своей библиотеке NET Framework, если хотите .

...