如何在一组用户中循环并在C#中添加这些用户

时间:2014-05-01 12:22:58

标签: c#

我有一些设置用户的代码:

const string name = "joe";
const string password = "abc";
const string roleName = "def";

在此之后,有很多C#代码要添加用户:

var role = RoleManager.FindByName(roleName);
if (role == null) {
    role = new IdentityRole(roleName);
    var roleresult = RoleManager.Create(role);
}

var user = UserManager.FindByName(name);
if (user == null) {
    user = new ApplicationUser { UserName = name, Email = name };
    var result = UserManager.Create(user, password);
    result = UserManager.SetLockoutEnabled(user.Id, false);
}

// Add user admin to Role Admin if not already added
var rolesForUser = UserManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name)) {
    var result = UserManager.AddToRole(user.Id, role.Name);
}

我需要添加四个或五个不同的用户 有没有办法可以将我的用户放在一个对象中并循环调用添加代码?

1 个答案:

答案 0 :(得分:4)

肯定有办法!但为了做到这一点,需要几步才能到达那里。首先,创建一个小类来代表"用户"。这是一个带有构造函数和一些自动属性的文件:

public class MyUser
{
    public MyUser(string name, string password, string roleName)
    {
        this.Name = name;
        this.Password = password;
        this.RoleName = roleName;
    }
    public string Name { get; set; }
    public string Password { get; private set; }
    public string RoleName { get; set; }
}

免责声明:不要打电话给这个班级MyUser,想出一个更好的名字!这只是为了说明!

现在,要将您的用户&#34;放在一个对象&#34;中,您可以创建一个List<T>对象并向其添加一些新的MyUser实例:

var newUsers = new List<MyUser>
{
    new MyUser("name1", "pwd1", "role1"),
    new MyUser("name2", "pwd2", "role2"),
    etc.
};

这会创建列表,并使用集合初始化程序语法立即将用户添加到其中。如果你需要在循环中完成它,你也可以做很长的事情:

var newUsers = new List<MyUser>();
newUsers.Add(new MyUser("name1", "pwd1", "role1"));
newUsers.Add(new MyUser("name2", "pwd2", "role2"));
// etc.

接下来,让你的&#34;创建用户&#34;函数中的代码会有所帮助,但需要MyUser类作为参数:

public void CreateUser(MyUser myUser)
{
    // A little protection
    if (myUser == null)
        throw new ArgumentNullException("user");

    var role = RoleManager.FindByName(myUser.RoleName);
    if (role == null) {
        role = new IdentityRole(myUser.RoleName);
        var roleresult = RoleManager.Create(role);
    }

    var user = UserManager.FindByName(myUser.Name);
    if (user == null) {
        user = new ApplicationUser { UserName = myUser.Name, Email = myUser.Name };
        var result = UserManager.Create(user, myUser.Password);
        result = UserManager.SetLockoutEnabled(user.Id, false);
    }

    // Add user admin to Role Admin if not already added
    var rolesForUser = UserManager.GetRoles(user.Id);
    if (!rolesForUser.Contains(role.Name)) {
        var result = UserManager.AddToRole(user.Id, role.Name);
    }
}

现在,要最终创建用户,您只需循环浏览MyUser列表并将其传递给CreateUser()函数:

foreach (var user in newUsers)
{
    CreateUser(user);
}

当然,您希望在必要时合并try/catch块,添加适当的验证等。这只是为了说明我将如何处理此问题。