Суть такая: раньше была (и пока что есть) таблица с воркерами (без права заходить на сервер) и еще несколько таблиц с юзерами (менеджерами и прочим управляющим персоналом) и их ролями, которые создаются через 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.
В общем вопрос - как сделать правильную миграцию данных в описанном случае? Буду рад подсказке.