lsd.Database Manager
При разработке любого приложения, использующего базы данных, рано или поздно возникает необходимость иметь некоторый центр раздачи объектов подключения к базам данных. Этот центр должен поддерживать любое количество баз данных, позволять работать с подключением к базе, используя его логическое имя, и быть легко настраиваемым конечным пользователем. Подробнее об этом вопросе можно прочитать в статье «.NET Development. Менеджер подключений к базам данных».
Как раз для решения подобных задач и создан компонент lsd.Database. Формально, он является частью серверного «движка» Live Server Documents, но может быть успешно использован в любом приложении .NET.
Рассмотрим главные особенности компонента.
Единая конфигурация
В .NET Framework нет готового механизма, который позволил бы задать где-то все подключения к базам, используемые приложением, поименовать эти подключения и затем получать их просто по имени. Данный модуль восполняет эту недостачу. У него есть единое место для конфигурации – своя секция в файле «.config». Структура секции:
|
<lsd.Database>
<connection
name = " "
connectionString = " "
default = "true | false"
connectionType = " "
/>
</lsd.Database>
|
Здесь:
name
Название подключения.
connectionString
Строка подключения стандартного формата.
default
Указывает на то, что данное подключение является подключением по умолчанию для этого приложения. Если этот элемент опущен, считается, что он равен false.
connectionType
Тип объекта подключения в стандартном формате для Type.GetType( string ). По умолчанию используется SqlConnection.
Получение connection по имени
По запросу компонент возвращает объект подключения с указанным именем. Если в запросе дано пустое имя (null), то будет возвращен объект подключения по умолчанию.
Безопасное открытие и автоматическое закрытие
Общеизвестное правило по работе с подключением в базу данных – открывать его только непосредственно перед использованием и закрывать сразу, как оно перестало требоваться. Очевидно, что для простоты кода идеально было бы всегда открывать подключение перед использованием, не задумываясь о том, не было ли оно уже открыто. Закрывать тоже, естественно, нужно всегда, даже если реального открывания и не производилось.
Для решения этой задачи, компонент предлагает класс DbOpen, который подключается к базе в конструкторе, если это необходимо, и отключается от нее в методе Dispose. Используется этот класс так:
|
using( new DbOpen( connection )) {
... // Код, использующий базу данных
} // В этой точке класс автоматически уничтожается через Dispose
|
Специфика реализации
Сценарии использования модуля в настольном (desktop) приложении и в ASP.NET различаются. В первом случае, мы создаем экземпляр менеджера и работаем с ним до самого завершения приложения в одном и том же потоке. Если даже в приложении есть несколько потоков, то взаиморасположение менеджеров, использующих их классов и потоков, в которых они работают, не меняется. Во втором случае, с каждым новым запросом соответствие между потоками и объектами меняется.
Для обеспечения стабильной работы приложения, нам необходимо, чтобы определенный объект приложения все время своего существования работал с одним и тем же менеджером. Иначе говоря, вызов метода DbManager.Get() должен возвращать менеджер, приписанный к приложению, обрабатывающему текущий запрос. Для этого мы используем класс AspAdapter, который, в начале обработки запроса, связывает принадлежащий приложению экземпляр менеджера с потоком, который в данный момент работает с этим приложением.
Классы
DbManager
Центральный объект всего компонента. Содержит пул объектов подключения и позволяет получать объект по его логическому имени.
Configurator
Служит для чтения конфигурационной информации из файла «.config».
AspAdapter
Модуль (HttpModule), служащий для коррекции постоянно меняющего взаиморасположения экземпляров менеджера и рабочих потоков, в случае использования библиотеки в приложении ASP.NET.
DbOpen
Служит для открытия базы, если она закрыта, с последующим автоматическим закрытием, если она открывалась.
Доступность компонента
Компонент lsd.Database можно скачать с нашего сайта и бесплатно использовать его в своих приложениях.