0

我有一个从默认继承的类Authorization调用的项目CodeFirstRoleProviderRoleProvider

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?这样这些角色就会在应用程序运行时首次添加到数据库中。

假设这个程序第一次运行并且有人点击了注册按钮,我想要一个包含上述角色的下拉列表。因此,在单击注册之前,这些角色需要在数据库中。

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

4

2 回答 2

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();
        }

一旦将角色添加到数据库中,我就会删除那些添加角色的代码。

于 2013-06-12T13:34:12.283 回答
0

Take a look at this article on seeding the SimpleMembership database. Even if you are not using the SimpleRoleProvider the same principals should apply since you are using code-first.

于 2013-06-12T15:23:11.247 回答