EF Core Seed Migrations: пересев - PullRequest
       10

EF Core Seed Migrations: пересев

0 голосов
/ 03 сентября 2018

Я знаком и использую EF Core 2.1 Миграция и заполнение. Однако мне неясно, как перенести семена в новую (измененную) версию.

Итак, в версии 1 приложения у меня есть:

modelBuilder.Entity<Category>().HasData(
  new Category[]
  {
    new Category() { Id = 1, Name = "Category A" },
    new Category() { Id = 2, Name = "Category B" },
    new Category() { Id = 3, Name = "Category C" }
  });

Пользователи добавляли элементы в эти категории, т.е.

public class Category {
    public List<UserItem> Items {get; set;}
}

И к вашему сведению: формы Xamarin - поэтому база данных представляет собой Sqlite db на устройстве каждого пользователя.

Сейчас я выпускаю версию 2, и категории изменились, но я не хочу терять ни одну из существующих пользовательских данных.

Исходные данные категории теперь выглядят так:

modelBuilder.Entity<Category>().HasData(
  new Category[]
    {
      new Category() { Id = 1, Name = "Category A" },
      new Category() { Id = 2, Name = "Category B has a new name" },
      // Category C has been merged with Category B
    });

Категория A не изменилась, B получил новое имя, C был удален, а элементы C теперь должны находиться в категории B.

Как это достигается при переносе EF Core, чтобы сохранить существующие данные UserItems в новых категориях (учитывая, что, поскольку у каждого пользователя есть своя собственная база данных, я могу мигрировать только с использованием контекста времени выполнения EF.Migrate ())?

1 Ответ

0 голосов
/ 07 сентября 2018

Изменения для категории A и категории B должны обрабатываться путем простого добавления новой миграции после внесения изменений в параметры HasData().

Перемещение дочерних объектов из категории C в категорию B, однако, потребует ручного редактирования миграции после ее добавления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...