Asp.net core 设定数据库种子时RoleManager ArgumentNullException
当我运行我的应用程序时,在Asp.net core 设定数据库种子时RoleManager ArgumentNullException,asp.net-core,asp.net-identity,entity-framework-core,Asp.net Core,Asp.net Identity,Entity Framework Core,当我运行我的应用程序时,在ensureedataasync方法的第一个if条件中,抛出一个ArgumentNullException,并显示消息“值不能为null。”。当它到达这一点时,_roleManager不为空。给定给构造函数的参数也不是null FletnixUser是从IdentityUser继承的空类,FletnixRole是从IdentityRole继承的空类 有人知道是什么导致了这个错误吗?我无法找到原因,甚至重建了数据库并将其迁移到identity框架。我试着注释掉所有的角色函
ensureedataasync
方法的第一个if
条件中,抛出一个ArgumentNullException
,并显示消息“值不能为null。
”。当它到达这一点时,_roleManager不为空。给定给构造函数的参数也不是null
FletnixUser
是从IdentityUser
继承的空类,FletnixRole
是从IdentityRole
继承的空类
有人知道是什么导致了这个错误吗?我无法找到原因,甚至重建了数据库并将其迁移到identity框架。我试着注释掉所有的角色函数和FletnixSeedData构造函数中的第三个参数,这样它只创建一个用户,这是可行的
我包含了startup.cs
类,因为该类是调用FletnixSeedData
类的唯一类
FletnixSeedData.cs
您是否检查了
\u roleManager
是否为空?是的,正如我在问题顶部提到的。这就是它的奇怪之处,一切似乎都很好,但它仍然会抛出一个错误。啊,对不起,错过了。角色经理是否具有所有正确的从属关系?您能进入角色列表同步吗?
public class FletnixSeedData {
private FletnixContext _context;
private UserManager<FletnixUser> _userManager;
private RoleManager<FletnixRole> _roleManager;
public FletnixSeedData(FletnixContext context, UserManager<FletnixUser> userManager, RoleManager<FletnixRole> roleManager) {
_context = context;
_userManager = userManager;
_roleManager = roleManager;
}
public async Task EnsureSeedDataAsync() {
// If roles and users exist, delete
if (!await _roleManager.RoleExistsAsync("Customer")) {
await _roleManager.DeleteAsync(await _roleManager.FindByNameAsync("Customer"));
}
if (await _roleManager.FindByNameAsync("Admin") != null) {
await _roleManager.DeleteAsync(await _roleManager.FindByNameAsync("Admin"));
}
if (await _roleManager.FindByNameAsync("FinancialManager") != null) {
await _roleManager.DeleteAsync(await _roleManager.FindByNameAsync("FinancialManager"));
}
if (await _roleManager.FindByNameAsync("CEO") != null) {
await _roleManager.DeleteAsync(await _roleManager.FindByNameAsync("CEO"));
}
if (await _userManager.FindByEmailAsync("myemail@gmail.com") != null) {
await _userManager.DeleteAsync(await _userManager.FindByEmailAsync("myemail@gmail.com"));
}
// Recreate roles and users
var customerRole = new FletnixRole {
Name = "Customer"
};
var adminRole = new FletnixRole {
Name = "Admin"
};
var financialManagerRole = new FletnixRole {
Name = "FinancialManager"
};
var ceoRole = new FletnixRole {
Name = "CEO"
};
await _roleManager.CreateAsync(customerRole);
await _roleManager.CreateAsync(adminRole);
await _roleManager.CreateAsync(financialManagerRole);
await _roleManager.CreateAsync(ceoRole);
var newUser = new FletnixUser {
UserName = "myusername",
Email = "myemail@gmail.com"
};
await _userManager.CreateAsync(newUser, "P@ssw0rd!");
await _userManager.AddToRoleAsync(newUser, "Customer");
}
}
public void ConfigureServices(IServiceCollection services) {
services.AddMvc();
services.AddIdentity<FletnixUser, FletnixRole>(config => {
config.User.RequireUniqueEmail = true;
config.Password.RequiredLength = 6;
config.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
}).AddEntityFrameworkStores<FletnixContext>();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<FletnixContext>();
services.AddScoped<IFletnixRepository, FletnixRepository>();
services.AddTransient<FletnixSeedData>();
}
public async void Configure(IApplicationBuilder app, FletnixSeedData seeder) {
#if DEBUG
app.UseDeveloperExceptionPage();
#endif
app.UseStaticFiles();
app.UseIdentity();
app.UseMvc(config => {
config.MapRoute(
name: "Default",
template: "{controller}/{action}/{id?}",
defaults: new {
controller = "Auth", action = "Login"
}
);
});
await seeder.EnsureSeedDataAsync();
}