以下代码不起作用,我无法解释原因...我的用户管理器造成了极大的困扰,因为它可以很好地创建用户和角色,但是当我运行此代码时,userManager.IsInRole始终返回false,因此第二个运行种子时,我遇到了错误,因为尽管事实已经存在,但它仍在尝试创建记录!
请注意,这是在我针对迁移项目运行更新数据库时发生的,这是否是非ASP项目引起的事实,如果是的话,为什么?不应该引发错误。
这是我使用Identity的第一个项目,尽管它看起来不错,但几乎没有最新的高质量文档,因此,如果有人对此有任何资源,我将不胜感激。
public void Run(BlogContext blogContext)
{
var userStore = new UserStore<User>((BlogContext) blogContext);
var userManager = new UserManager<User>(userStore);
var userRoles = new List<UserRole>()
{
new UserRole() {Username = "[email protected]", Role = "SysAdmin"},
new UserRole() {Username = "[email protected]", Role = "Admin"},
new UserRole() {Username = "[email protected]", Role = "Author"}
};
foreach (var userRole in userRoles)
{
var userId = userManager.FindByName(userRole.Username).Id;
if (!userManager.IsInRole(userId, userRole.Role))
userManager.AddToRole(userId, userRole.Role);
}
blogContext.SaveChanges();
}
最佳答案
因此,我自己回答这个问题,以节省任何人因此而遭受的痛苦。
发生这种情况的原因是,我禁用了延迟加载,因此已经在我的Migrations项目中启用了此功能。
protected override void Seed(BlogContext blogContext)
{
AutomaticMigrationsEnabled = true;
blogContext.Configuration.LazyLoadingEnabled = true;
//Add seed classes here!
}