Как повлиять на порядок столбцов с помощью Entity Framework Code First Migrations

Я использую Entity Framework 4.3 Code First и пробую функцию миграции.

Если я добавлю новое свойство в свой класс, а затем запущу Add-Migration из окна консоли диспетчера пакетов, я получу что-то вроде этого:

    public override void Up()
    {
        AddColumn("Products", "Discontinued", c => c.Boolean(nullable: false));
    }

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

Property(p => p.Discontinued).HasColumnOrder(2);

но запуск Update-database, похоже, не использует его. Можно ли это сделать как миграцию?


person SteveB    schedule 27.03.2012    source источник
comment
а) Невозможно вставить в предыдущие столбцы без большого количества взломов, б) вы не должны хранить устаревшие данные в своей базе данных с помощью мягкого удаления - посмотрите на архивирование устаревших данных.   -  person Travis J    schedule 28.03.2012
comment
Какой смысл иметь столбцы в таблице базы данных в определенном порядке? Это просто хранилище данных.   -  person Ladislav Mrnka    schedule 28.03.2012
comment
Просто из эстетических соображений и все. Вы можете указать его, когда база данных создается с помощью построителя моделей, поэтому просто интересно, возможно ли это при добавлении нового столбца в рамках миграции. Ничего страшного.   -  person SteveB    schedule 28.03.2012
comment
Для меня это огромная проблема. Я настраиваю модель Code First в соответствии с существующей (огромной) базой данных. Инструменты CF не позволяют принудительно упорядочить вновь созданную базу данных, а инструмент сравнения схем не позволяет игнорировать порядок столбцов. С сотнями столов у меня уйдут дни, а не часы.   -  person HiredMind    schedule 14.08.2012


Ответы (1)


Это просто вопрос отсутствия функциональности. SQL сам по себе не полагается на какой-либо неявный порядок столбцов (за некоторыми исключениями: ORDER BY , ...).

Ни SQL Server, ни ORACLE не имеют прямой команды SQL DDL (также известной как ALTER TABLE...) для перемещения столбца.

Поэтому нет возможности изменить порядок без особых усилий (пересоздать таблицу). См. например

person Stephen Reindl    schedule 22.03.2015