Могу ли я переименовать первую миграцию кода в ASP.NET MVC 5

Это немного странный вопрос о первой миграции кода в asp.net mvc 5. У меня есть текущий проект, и я использую ручную миграцию для обновления своей базы данных. Если я делаю что-то, что меняет структуру базы данных в моей модели, я захожу в консоль диспетчера пакетов и набираю

add-migration "MigrationName"

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

Например, у меня было следующее имя:

201411190809335_CreateStageTypeRender

а надо было прочитать

201411190809335_CreateSeatingTypeRender

если я не изменю имя сейчас в будущем, я могу случайно выбрать эту миграцию, потому что я назвал ее неправильно.

Кажется, когда я переименовывал их раньше в тех случаях, когда это не был важный проект, эта визуальная студия переименовывала любые подфайлы (.cs, .resx). ТАК, казалось бы, это не будет проблемой, плюс метка времени будет идти в ногу, так что она должна держать их в порядке.

Вопрос: есть ли что-то еще, что я должен принять во внимание. Можно ли переименовать описательную часть имени файла миграции?

Кстати. Я также могу зайти в файл Designer.cs и переименовать возвращаемое значение из:

public sealed partial class CreateStageTypeRender : IMigrationMetadata
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateStageTypeRender));
    string IMigrationMetadata.Id
    {
        get { return "201411190809335_CreateStageTypeRender"; }
    }

to

public sealed partial class CreateSeatingTypeRender : IMigrationMetadata
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateSeatingTypeRender));
    string IMigrationMetadata.Id
    {
        get { return "201411190809335_CreateSeatingTypeRender"; }
    }

Наконец, я зашел в базу данных и переименовал записи, соответствующие старым именам миграции, и изменил их, чтобы они отражали новые имена миграции. В противном случае я предполагаю, что EF/Visual Studio будет думать, что есть новые миграции, когда их нет.

Я думаю, что у меня есть все мои базы покрыты. Пожалуйста, дайте мне знать, если вы думаете, что я что-то пропустил или если это не очень хорошая идея по какой-то причине.


person Eric Bishard    schedule 21.11.2014    source источник
comment
Были ли у вас какие-либо проблемы с этой техникой с тех пор, как вы впервые попробовали ее?   -  person madamission    schedule 19.07.2015
comment
Однако у меня не было никаких проблем; Я также никогда не ориентировался на эти миграции. Я думаю, что окончательным тестом было бы начать новый проект, очень быстро настроить базу данных и выполнить несколько миграций, а затем вернуться и вручную переименовать их, сделать еще несколько миграций и обновлений, а затем попытаться вернуться к одной из переименованных миграций. . Как насчет этого, кто из нас сможет найти время, чтобы сделать это первым, вернуться сюда и оставить комментарий. Черт, если вы это сделаете, вы можете ответить на вопрос.   -  person Eric Bishard    schedule 20.07.2015
comment
хорошо звучит, попробую...   -  person madamission    schedule 20.07.2015


Ответы (1)


Наконец-то я вернулся к проекту, в котором была эта проблема, и он отлично работает.

В вашем примере вы упомянули, что изменили тип возвращаемого значения на CreateSeatingTypeRender... Я просто хочу уточнить, что для моего тестирования во имя согласованности есть пять мест, где следует внести изменение.

Четыре из них находятся в коде: имя класса, частичное имя класса файла .designer, тип менеджера ресурсов и свойство IMigrationMetadata.Id, о котором вы упомянули…

Последнее место в данных, как вы также упомянули, обновите MigrationId со старого имени на новое.

Внеся эти изменения, команда upgrade-database сработала отлично.

Для тех, кто пытается это сделать, также имейте в виду, если вы переименовываете миграцию в своей базе данных разработки... если эта миграция уже существует на рабочей машине, вам также придется вручную переименовать строки таблицы __migration и любые другие места, куда эта миграция уже добралась, когда вы выполняете развертывание на этой машине.

Примечания по тестированию: • Я тестировал ef 6.1.3 • Это не специфично для MVC5

person madamission    schedule 20.01.2016