Параметры базы - QualitySolution/QSProjects GitHub Wiki
Введение
Во всех наших проектах в базе данных существует таблица base_parameters
которая содержит различные настройки приложения на уровне базы данных. Стандартные модули хранят там версию базы данных и т.п. Но каждый проект может использовать эту таблицу для хранения различных настроек.
Внутри таблица base_parameters
содержит всего две колонки name
и str_value
. Колонка с именем параметра должна быть уникальна это первичный ключ таблицы.
Сервис работы с параметрами базы
Для удобной работы с настройками существует сервис QS.BaseParameters.ParametersService
, ему в конструктор необходимо передать только соединение с базой DbConnection
. Далее к нему можно обращаться как для получения значений из базы, так и для установки их.
Классический режим
В классическом режиме сервис предоставляет доступ на чтение ко всем загруженным из базы данных параметрам через словарь All
.
var productName = parametersService.All["product_name"];
Код выше показывает как получить значение параметра. Создать новый параметр или обновить значение имеющегося можно через метод UpdateParameter
.
parametersService.UpdateParameter("version", "2.3");
Удалить параметр можно с помощь метода RemoveParameter
. Если есть необходимость повторно загрузить значения из базы данных, можно вызвать ReloadParameters
.
Динамический режим
Текущая версия сервиса позволяет более удобно работать с параметрами базы данных через динамический объект. Для этого сервис нужно привести к динамическому объекту через использование ключевого слова dynamic
. В этом варианте с параметрами базы можно работать напрямую, как будто параметры это просто свойства сервиса.
dynamic parameters = parametersService;
var productName = parameters.product_name;
Код выше демонстрирует пример чтение параметра с именем product_name
. Если в базе данных параметра с указанным именем нет, свойство будет иметь значение null, исключение в этом случае не произойдет. Так же просто можно и устанавливать новое значение параметра или создать новый параметр.
parameters.MyNewParameter = "My Text";
Удалить параметр из базы, можно присвоив ему значение null.
parameters.MyNewParameter = null;
Конвертация параметров
По умолчанию все значение параметров это строки и в базе данных они хранятся именно в строковом формате. Получая значение из предыдущих примеров вы получаете именно то что находится в БД. Но иногда значение параметра это число или True\False. Для таких случаем есть режим автоматического преобразования значения к необходимому типу.
//В БД, строковое значение "42"
int answerToUltimateQuestionOfLife = parameters.Answer(typeof(int));
Данная возможность работает со следующими типами:
- все встроенные числовые типы (int, uint, double, decimal и т.п.)
- bool
- Version
- Guid
Так как при отсутствии параметра метод возвращает null, результат так же легко приводится к nullable типам.
Использование индексатора
Дополнительно есть возможность обращаться к параметру базы через индексатор на самом сервисе. Плюсы этого подхода, по сравнению с классическим режимом и обращении к All, в том что позволяют более однообразно работать с параметрами. Из коллекции All в классическом режиме параметры можно только читать. При этом есть необходимость проверять наличие параметра в коллекции. Обращение через индексатор позволяет работать с параметрами так же как в динамическом режиме, но с названиями параметров в виде строки. Ниже примеры. Все примеры вызовут исключение если индекс не строка.
dynamic parameters = parametersService;
//Получение параметра всегда в виде строки, вернет null если параметр еще не установлен.
var productName = parameters["product_name"];
//Установит значение параметра или создаст параметр если его не было.
parameters["MyNewParameter"] = "My Text";
//Удалит параметр из базы.
parameters["MyNewParameter"] = null;