如何在部署期间在 Seed 方法中 运行 编码?
How to run code within Seed method during deployment?
我有一个使用 ASP.NET Identity (v2.1) 和 Entity Framework v6.1 的 Web Api 解决方案。在 Configuration.cs 文件的 Seed() 方法中,我有创建我的第一个身份用户的代码。此代码使用身份框架来散列密码、创建安全标记等。这些都是我无法通过 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);
我有一个使用 ASP.NET Identity (v2.1) 和 Entity Framework v6.1 的 Web Api 解决方案。在 Configuration.cs 文件的 Seed() 方法中,我有创建我的第一个身份用户的代码。此代码使用身份框架来散列密码、创建安全标记等。这些都是我无法通过 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);