更改现有Asp.Net MVC 5(身份2)应用程序的种子方法?

时间:2015-07-22 04:12:11

标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2

如何将固定角色(例如管理员)添加到现有的Asp.Net Mvc / Identity 2网站?

在链接中 http://bitoftech.net/2015/03/11/asp-net-identity-2-1-roles-based-authorization-authentication-asp-net-web-api/,有以下代码,这正是我想要做的。但是,自应用程序以来,Seed函数是否会被执行? (我已经在var lookup1 = new List<L1>{new L1 {...},...}; tableL1.ForEach(l => context.tableL1.AddOrUpdate(p=>p.Title, l)); context.SaveChanges();函数中有一些代码Seed来为一些查找表提供种子。)。将角色添加到已在线的应用程序的正确方法是什么?

// internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(AspNetIdentity.WebApi.Infrastructure.ApplicationDbContext context)
    {
        //  This method will be called after migrating to the latest version.

        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 = "SuperPowerUser",
            Email = "taiseer.joudeh@gmail.com",
            EmailConfirmed = true,
            FirstName = "Taiseer",
            LastName = "Joudeh",
            Level = 1,
            JoinDate = DateTime.Now.AddYears(-3)
        };

        manager.Create(user, "MySuperP@ss!");

        if (roleManager.Roles.Count() == 0)
        {
            roleManager.Create(new IdentityRole { Name = "SuperAdmin" });
            roleManager.Create(new IdentityRole { Name = "Admin"});
            roleManager.Create(new IdentityRole { Name = "User"});
        }

        var adminUser = manager.FindByName("SuperPowerUser");

        manager.AddToRoles(adminUser.Id, new string[] { "SuperAdmin", "Admin" });
    }
}

1 个答案:

答案 0 :(得分:1)

如果您想为数据库设定种子,则必须在程序包管理器控制台Enable-Migrations

我猜你已经完成了,因为你已经拥有 Configuration.cs 文件。

configuration类的构造函数中,确保将AutomaticMigrationsEnabled设置为false,否则将重新创建数据库。

public Configuration()
{
    AutomaticMigrationsEnabled = false;
}

现在您可以编译解决方案,并从程序包管理器控制台(确保在默认项目组合中选择正确的项目)运行:

Update-Database

Update-Database -Verbose

如果您想收集更多信息。

你应该在数据库中看到你的新数据。