Как отредактировать ранее примененную миграцию, не добавляя сначала первую миграцию в EF-код

code-first-migrations ef-code-first entity-framework entity-framework-6

Вопрос

У меня есть прикладная миграция с использованием схемы «haward» db.

public partial class CreateCourseCategoryTable : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "haward.CourseCategories",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Name = c.String(),
                        Code = c.String(),
                    })
                .PrimaryKey(t => t.Id);
        }

        public override void Down()
        {
            DropTable("haward.CourseCategories");
        }
    }

с этим отображением

public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
    {
        public CourseCategoryMapping()
        {
            ToTable("CourseCategories", "haward");
        }
    }

теперь я хочу изменить схему с «haward» на «tr». Я не хочу добавлять миграцию с этим, поэтому я подумал о простом редактировании исходного кода Migration and Mapping.

public partial class CreateCourseCategoryTable : DbMigration
        {
            public override void Up()
            {
                CreateTable(
                    "tr.CourseCategories",
                    c => new
                        {
                            Id = c.Int(nullable: false, identity: true),
                            Name = c.String(),
                            Code = c.String(),
                        })
                    .PrimaryKey(t => t.Id);
            }

            public override void Down()
            {
                DropTable("tr.CourseCategories");
            }
        }


    public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
        {
            public CourseCategoryMapping()
            {
                ToTable("CourseCategories", "tr");
            }
        }

затем заново создайте пустую базу данных и выпустите команду update-database, но она сообщит, что у меня все еще есть ожидающие изменения.

поэтому мне была выдана команда add-migration, чтобы проверить, какие именно изменения. и кажется, что он все еще обнаруживает мои изменения (от «haward» до «tr») даже без таблицы миграции.

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

Популярные ответы

TL; DR: Это очень сложно - намного проще просто добавить новую миграцию позже, чтобы исправить проблему.

Миграция Entity Framework состоит из двух частей - кода и хэша модели. Хэш модели используется для определения того, изменилась ли модель и, следовательно, необходимы ли какие-либо новые миграции.

Если вы измените модель, вы измените хэш. Этот хэш сохраняется в файле MigrationName.designer.cs. Вы не можете просто изменить модель и изменить код migration.cs, так как модель больше не соответствует хеше модели. Вам также необходимо восстановить хэш для модели.

Единственный способ сделать это - свернуть свою базу данных и обновить хэш.

У вас есть 3 миграции:

  • Migration1
  • Migration2
  • Migration3

Если вы хотите применить изменения с Migration2 и далее ...

  • Update-Database -TargetMigration Migration1 -Force назад в Migration1: Update-Database -TargetMigration Migration1 -Force (NB - это может привести к потере данных, поэтому работайте над копией разработки вашей базы данных)
  • Сделайте код модели совпадающим с тем, что вы хотите для миграции 2, и обновите код для миграции 2 вручную
  • Восстановите файл конструктора для Migration2: Add-Migration xxxxxxxxxxx_Migration2 (используйте полное имя миграции, включая дату). Это приведет к обновлению файла designer.cs
  • Apply Migration2: Update-Database -TargetMigration Migration2
  • Повторно применить любую модель к вашему коду для Migration3
  • Восстановить файл конструктора для Migration3: Add-Migration xxxxxxxxxxx_Migration3
  • Обновите базу данных до последней версии: Update-Database



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему