2013-06-12 50 views
0

我有一个名为AuthorizationCodeFirstRoleProvider类从默认RoleProviderMVC4:在数据库中添加角色

public class CodeFirstRoleProvider : RoleProvider 
{ 
    public override void CreateRole(string roleName) 
     { 
      if(string.IsNullOrEmpty(roleName)) return; 
      using(var context = new SISContext()) 
      { 
       var role = context.Roles.SingleOrDefault(rl => rl.RoleName == roleName);//Roles table exists in database 
       if(role == null) 
       { 
        var newRole = new Role 
             { 
              RoleId = Guid.NewGuid(), 
              RoleName = roleName 
             }; 
        context.Roles.Add(newRole); 
        context.SaveChanges(); 
       } 
      } 
     } 
} 

继承了我的其他项目WebPortal我想用上述方法的项目让我们说下面的方式

var _role = new CodeFirstRoleProvider(); 
      _role.CreateRole("Admin"); 
      _role.CreateRole("NonAdmin"); 

现在我需要把这段代码放在我的webportal的哪里?以便这些角色在应用程序运行时第一次被添加到数据库中。

假设这个程序第一次运行,有人点击注册按钮我想有一个提到上述角色的下拉列表。所以,这些角色需要在点击注册之前在数据库中。

一旦角色在数据库中,我不需要担心将来访问这些值。 一种方法是手动将值写入数据库,但我不想这样做,因为我有这个功能可以使用。

回答

0

如果我做这样的事情?

[AllowAnonymous] 
     public ActionResult Login(string returnUrl) 
     { 
      var _role = new CodeFirstRoleProvider();//remove after role is added to database 
      _role.CreateRole("Admiin");//remove after role is added to database 
      _role.CreateRole("NonAdmin");//remove after role is added to database 

      ViewBag.ReturnUrl = returnUrl; 
      return View(); 
     } 

,一旦角色将被添加到数据库中,我删除角色不添加这些代码。

+0

什么是CodeFirstRoleProvider()? – msysmilu