Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 种子角色(RoleManager与RoleStore)_Asp.net Mvc_Entity Framework_Asp.net Mvc 5_Asp.net Identity_Entity Framework Migrations - Fatal编程技术网

Asp.net mvc 种子角色(RoleManager与RoleStore)

Asp.net mvc 种子角色(RoleManager与RoleStore),asp.net-mvc,entity-framework,asp.net-mvc-5,asp.net-identity,entity-framework-migrations,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Asp.net Identity,Entity Framework Migrations,通过查看这里的帖子,我看到了通过实体框架种子创建ASP.NET身份角色的两种不同方法。一种方法使用rolemager,另一种方法使用RoleStore。我想知道这两者之间是否有区别。因为使用后者将避免少一次初始化 string[] roles = { "Admin", "Moderator", "User" }; // Create Role through RoleManager var roleStore = new RoleStore<IdentityRole>(conte

通过查看这里的帖子,我看到了通过实体框架种子创建ASP.NET身份角色的两种不同方法。一种方法使用
rolemager
,另一种方法使用
RoleStore
。我想知道这两者之间是否有区别。因为使用后者将避免少一次初始化

string[] roles = { "Admin", "Moderator", "User" };

// Create Role through RoleManager

var roleStore = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(roleStore);

foreach (string role in roles)
{
    if (!context.Roles.Any(r => r.Name == role))
    {
       manager.Create(new IdentityRole(role));
    }

// Create Role through RoleStore

var roleStore = new RoleStore<IdentityRole>(context);

foreach (string role in roles)
{
    if (!context.Roles.Any(r => r.Name == role))
    {
       roleStore.CreateAsync(new IdentityRole(role));
    }
}
string[]角色={“管理员”、“版主”、“用户”};
//通过角色管理器创建角色
var roleStore=新roleStore(上下文);
var管理者=新的角色管理者(角色存储);
foreach(角色中的字符串角色)
{
if(!context.Roles.Any(r=>r.Name==role))
{
创建(新的IdentityRole(角色));
}
//通过RoleStore创建角色
var roleStore=新roleStore(上下文);
foreach(角色中的字符串角色)
{
if(!context.Roles.Any(r=>r.Name==role))
{
CreateAsync(新的IdentityRole(角色));
}
}

在您的特定情况下,使用这两种方法可以获得相同的结果

但是,正确的用法是:

var context=new ApplicationIdentityDbContext();
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
字符串[]角色={“管理员”、“版主”、“用户”};
foreach(角色中的字符串角色)
{
如果(!roleManager.RoleExists(角色))
{
创建(新的IdentityRole(角色));
}
}
RoleManager
RoleStore
上的包装器,因此当您向管理器添加角色时,实际上是将它们插入存储,但是这里的区别是
RoleManager
可以实现自定义的
IIdentityValidator
角色验证器

因此,实现验证程序,每次通过管理器添加角色,都将首先对其进行验证,然后再将其添加到存储