使用实体框架的ASP.NET MVC Core项目中的种子角色
问题描述:
我试图在最初创建数据库时将一些角色种到我的身份数据库上下文中。使用实体框架的ASP.NET MVC Core项目中的种子角色
对于我试图执行的代码就像是在这里说: 公共无效ConfigureServices(IServiceCollection服务)
: https://stackoverflow.com/a/29547994/985798
我在启动级内ConfigureServices法试过这种使用这个片段:
var rolestore =
new Microsoft.AspNetCore.Identity.EntityFrameworkCore.
RoleStore<Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole>(identityContext);
var roleManager = new Microsoft.AspNetCore.Identity.RoleManager
<Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole>(rolestore);
//use rolemanager to insert roles etc.
的问题是,它似乎没有在新的核心项目工作,与Visual Studio 2017创建
它给了我下面的生成错误:
CS7036 There is no argument given that corresponds to the required formal parameter 'roleValidators' of 'RoleManager.RoleManager(IRoleStore, IEnumerable>, ILookupNormalizer, IdentityErrorDescriber, ILogger>, IHttpContextAccessor)'
即使我用其他的过载(与其他参数为空值),则RoleManager似乎也没有“创造”的方法了。
所以,我被困在这一点。我需要做什么?在角色管理器的ASP.NET MVC Core实现中有什么改变?我是否使用错误的东西?
答
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
public static class Seed
{
public static void Initialize(IServiceProvider provider)
{
var _context = provider.GetRequiredService<ApplicationDbContext>();
var userManager = provider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = provider.GetRequiredService<RoleManager<IdentityRole>>();
}
}
然后在下面的Configure()
中的大多数代码在startup.cs
Seed.Initialize(app.ApplicationServices);
HTH(希望帮助)。
得到它编译后,它可能会证明是一个问题,以执行Seed()。 Afaik计划用于EfCore 2.0。 –
你是什么意思?在启动时运行它应该可以正常工作,不是吗?我知道,这可能不是最好的地方,但我认为它应该起作用。 – Jannik
而不是“新建”RoleManager尝试在'Configure'方法中解析它。 [类似文章](https://stackoverflow.com/questions/39934201/asp-net-core-identity-add-custom-user-roles-on-application-startup/39934793#39934793)和[MusicStore](https: //github.com/aspnet/MusicStore/blob/1.0.0/src/MusicStore/Models/SampleData.cs#L22-L34) – tmg