问题描述
通过查看此处的帖子,我已经看到了通过实体框架种子创建ASP.NET身份角色的两种不同方式.一种方式使用RoleManager
,另一种方式使用RoleStore
.我想知道两者之间是否有区别.因为使用后者将避免较少的初始化
Through looking at the posts here, I've seen two different ways of creating ASP.NET Identity roles through Entity Framework seeding. One way uses RoleManager
and the other uses RoleStore
. I was wondering if there is a difference between the two. As using the latter will avoid one less initialization
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));
}
}
推荐答案
在您的特定情况下,使用这两种方法,您将获得相同的结果.
In your specific case, using both methods, you achieve the same results.
但是,正确的用法是:
var context = new ApplicationIdentityDbContext();
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
string[] roles = { "Admin", "Moderator", "User" };
foreach (string role in roles)
{
if (!roleManager.RoleExists(role))
{
roleManager.Create(new IdentityRole(role));
}
}
RoleManager
是RoleStore
的包装,因此,当您将角色添加到经理时,实际上是将它们插入商店,但是区别在于RoleManager
可以实现自定义IIdentityValidator<TRole>
角色验证器.
The RoleManager
is a wrapper over a RoleStore
, so when you are adding roles to the manager, you are actually inserting them in the store, but the difference here is that the RoleManager
can implement a custom IIdentityValidator<TRole>
role validator.
因此,实施验证器时,每次通过 manager 添加角色时,都会先对其进行验证,然后再将其添加到商店.
So, implementing the validator, each time you add a role through the manager, it will first be validated before being added to the store.
这篇关于种子角色(RoleManager与RoleStore)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!