Справочная информация
Я работаю над существующим сайтом Asp.Net, который использует перенос баз данных и идентификацию Asp.Net.
На сайте есть папка "Миграции", с несколькими миграциями базы данных.Некоторое время назад я создал миграцию «Seed_Only», которая ничего не делает, а просто, как следует из названия, выполняет метод Seed при его вызове следующим образом:
Update-Database -TargetMigration SeedOnly
Независимо от того, является ли это хорошей практикой или нет, метод Seed
создает новые роли, если статический вспомогательный класс RolesName
содержит какие-либо новые роли:
// Iterate all properties of RolesName and create roles if they don't exist
Type type = typeof(RolesName);
foreach (var p in type.GetFields())
{
var v = p.GetValue(null).ToString(); // static classes cannot be instanced, so use null...
if (!context.Roles.Any(x => x.Name.Equals(v)))
{
roleManager.Create(new IdentityRole() { Name = v });
}
}
Вопрос
Мы собираемся представить пару новых ролей.Я хочу убедиться, что каждый сайт, на котором работает приложение, обновляет свою базу данных при развертывании (мы развертываем с помощью Octopus).
Цели
Должно произойти следующее:
- Создать новые роли, если они еще не существуют
- Добавитьновые роли для существующих пользователей - если пользователи являются членами ранее существовавшей роли
Этот связанный ответ предполагает, что я вызову Database.SetInitializer(new ApplicationDbInitializer());
из конструктора ApplicationDbContext.Если я правильно понимаю ответ, это решит мою потребность в «постоянном обновлении ролей», но это не решит мою потребность в добавлении существующих пользователей к новым ролям, как указано в пункте 2.
Как мне идти к достижению моих целей?