【发布时间】:2018-05-24 11:08:31
【问题描述】:
背景
我正在使用数据库迁移和 Asp.Net 身份的现有 Asp.Net 站点工作。
该站点有一个“迁移”文件夹,其中包含一些数据库迁移。前段时间,我创建了一个“Seed_Only”-migration,它不做任何事情,只是——顾名思义——在这样调用时执行 Seed 方法:
Update-Database -TargetMigration SeedOnly
不管这是否是好的做法,如果静态帮助类RolesName 包含任何新角色,Seed 方法会创建新角色:
// 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 进行部署)。
目标
应该会发生以下情况:
- 如果新角色不存在,则创建新角色
- 将新角色添加到现有用户 - 如果用户是先前现有角色的成员
This related answer 建议我从 ApplicationDbContext 的构造函数中调用 Database.SetInitializer(new ApplicationDbInitializer());。如果我正确理解答案,这将解决我“不断更新角色”的需求,但它不能解决我将现有用户添加到新角色的需求,如第 2 点所述。
我应该如何实现我的目标?
【问题讨论】:
标签: asp.net entity-framework-6 entity-framework-migrations