Задать вопрос

Как выполнить Entity framework миграцию с миграцией данных?

Суть такая: раньше была (и пока что есть) таблица с воркерами (без права заходить на сервер) и еще несколько таблиц с юзерами (менеджерами и прочим управляющим персоналом) и их ролями, которые создаются через ASP Net Identity. На воркерах завязано несколько таблиц.

Теперь нужно перенести воркеров в таблицу с юзерами.

Использую EF Migration, с помощью него автоматически генерится код для миграции, и в середине этого кода (после того, как создадутся/обновятся таблицы и до того, как удалятся таблицы с воркерами и прочим) пытаюсь совершить, собственно, саму миграцию данных. Т.е. (упрощённо) как то так:
public override void Up()
{
       //Тут какой то код, обновляющий структуру БД
       using (var db = new CwDb())
            {
                const string getWorkersCommand = "Select * from workers";
                ...
                var workers = db.Database.SqlQuery<Worker>(getWorkersCommand);
                ...
                var userManager = new ApplicationUserManager(new UserStore<User>(db));
                var roleManager = new ApplicationRoleManager(new RoleStore<Role>(db));

                foreach (var worker in workers)
                {
                    var newWorker = new User()
                    {
                        ...
                    };
                    var result = userManager.Create(newWorker);

               // Потом для каждого созданного воркера обновляем связи в связанных таблицах

                db.SaveChanges();
            }
       //Тут какой то код, обновляющий структуру БД


Собственно, этот вариант не работает (что ожидаемо), выбрасывает исключение:
Базовая модель контекста "CwDb" изменилась с момента создания базы данных. Рассмотрите возможность обновления базы данных с помощью Code First Migrations (go.microsoft.com/fwlink/?LinkId=238269).


Вроде как в миграциях есть специальный метод, Sql(), но он не возвращает ничего, с чем можно было бы произвести то, что я написал выше. Возможно, я написал бы всё что нужно на SQL и просто выполнил бы это через Sql(), но как генерируются пользователи в Asp.Net Identity - не совсем ясно, в частности Id, Seciruty Stamp.

В общем вопрос - как сделать правильную миграцию данных в описанном случае? Буду рад подсказке.
  • Вопрос задан
  • 825 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2

Questions About Using EF
Questions about how to use EF can be asked on Stack Overflow using the entity-framework tag.

EF Team
Ответ написан
Комментировать
@MIsternik
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы