如何在部署期间运行Seed方法中的代码
本文关键字:方法 Seed 代码 运行 部署 | 更新日期: 2023-09-27 18:02:05
我有一个利用ASP的Web Api解决方案。. NET身份(v2.1)和实体框架v6.1。在Configuration.cs文件的Seed()方法中,我有创建第一个Identity用户的代码。该代码使用Identity框架来散列密码、创建安全戳等。这些都是我不能通过SQL做的事情,所以添加到Up()
方法似乎不像一个选项。
protected override void Seed(ApplicationDbContext context)
{
// Create the admin user
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
var user = new ApplicationUser()
{
UserName = "adminuser",
Email = "adminuser@mycompany.com",
EmailConfirmed = true,
FirstName = "John",
LastName = "Does",
JoinDate = DateTime.Now.AddYears(-1)
};
manager.Create(user, "SuperSecurePassword321!");
if (roleManager.Roles.Count() == 0)
{
roleManager.Create(new IdentityRole { Name = "Admin" });
roleManager.Create(new IdentityRole { Name = "Employee" });
roleManager.Create(new IdentityRole { Name = "Customer" });
}
var adminUser = manager.FindByName("adminuser");
manager.AddToRoles(adminUser.Id, new string[] { "Admin" });
}
我需要使用FTP来发布这个(没有控制这个)。关于如何运行这段代码一旦它被部署和数据库模式设置的建议?
我考虑过的选项:
- 我想过创建一个API端点,当调用时可以但是,启动此代码时,该端点必须允许
anonymous
访问,因为它将创建第一个用户和系统中使用的角色。然后我就需要让它失效或稍后删除此端点。 脚本数据库,包括数据,然后恢复到要部署的数据库服务器。
Seed()
在第一次访问数据库时被调用。这种自动行为有什么问题?
如果您想手动调用它,请尝试在protected void Application_Start()
中这样做:
Database.SetInitializer(new YourInititalizer());
var dbContext = new TheContextYouAreUsing();
dbContext.Database.Initialize(force: true);