logo

Сценарий создания индекса для столбца таблицы в глобальном модуле

В статье приведён пример сценария создания индекса для столбца таблицы в глобальном модуле. Аналогично можно выполнить любые преобразования базы данных.

using System;
using System.Collections.Generic;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Runtime.Db;
using EleWise.ELMA.Runtime.Db.Migrator.Framework;

namespace DbStructure
{
    /// <summary>
    /// Обработка действий при преобразовании структуры БД
    /// </summary>
    [Component]
    public class GlobalModuleDbUpdateHandler : DbUpdateHandler
    {
        /// <summary>
        /// Uid провайдера, для которого предназначается расширение (Guid.Empty применяется для всех провайдеров)
        /// </summary>
        public override Guid ProviderUid
        {
            get { return Guid.Empty; }
        }

        /// <summary>
        /// Определяет, есть ли изменения в структуре
        /// </summary>
        public override bool HasChanges
        {
            get { return !Transform.IndexExists("Address", "Address_Zip"); }
        }

        /// <summary>
        /// Нужно ли пересоздавать все ограничения, индексы и внешние ключи
        /// </summary>
        public override bool NeedRecreateConstraints
        {
            get { return false; }
        }

        /// <summary>
        /// После создания/преобразования таблиц и столбцов
        /// </summary>
        public override void OnTablesDeleted() // при NeedRecreateConstraints => false OnIndexesCreating не вызывается, ближайшее событие до него - OnTablesDeleted
        {
            // Создание индекса Address_Zip для таблицы Address и столбца Zip
            Transform.AddIndex(new Index
            {
                Name = "Address_Zip",
                TableName = "Address",
                Columns = new List<string>{ "Zip" }
            });
        }
    }
}