如何在部署期间在Seed方法中运行代码?

时间:2016-08-12 13:35:29

标签: c# entity-framework-6 asp.net-web-api2 asp.net-identity-2

我有一个使用ASP.NET Identity(v2.1)和Entity Framework v6.1的Web Api解决方案。在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来发布它(不能控制它)。有关如何在部署并且数据库是架构后运行此代码的任何建议吗?

我考虑的选项:

  1. 我考虑过在调用时可以创建一个API端点 启动此代码,然而,此端点必须允许 anonymous访问,因为它将创建第一个用户和 系统中使用的角色。然后我需要以某种方式禁用 或稍后删除此端点。
  2. 编写数据库脚本并包含数据,然后将其还原到 面向部署的数据库服务器。

1 个答案:

答案 0 :(得分:1)

第一次访问数据库时会调用

INTEGER。这种自动行为有什么问题?

如果您想手动调用它,请在Seed()

中尝试这样的操作
protected void Application_Start()