在asp.net核心的dbcontext中播种用户和角色:循环依赖问题

时间:2019-05-04 11:26:17

标签: c# entity-framework asp.net-core dependency-injection asp.net-identity

我正在dbcontext文件中注入UserManagerRoleManager,以便在首次创建数据库时使用它们来添加一些用户和角色。运行update-database命令时,出现以下错误:

  

检测到类型为'App.Models.AppDbContext'的服务的循环依赖关系。   App.Models.AppDbContext-> Microsoft.AspNetCore.Identity.UserManager-> Microsoft.AspNetCore.Identity.IUserStore

下面是dbcontext

public class AppDbContext : IdentityDbContext
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly RoleManager<IdentityRole> _roleManager;

    public AppDbContext(
        DbContextOptions<SynergyDbContext> options,
        UserManager<ApplicationUser> userManager,
        RoleManager<IdentityRole> roleManager
        ) : base(options) {

        _userManager = userManager;
        _roleManager = roleManager;
    }

    modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });

     ApplicationUser user = new ApplicationUser
     {
         //implementation details
     };

     IdentityResult result = _userManager.CreateAsync(user, "password").Result;
     if (result.Succeeded) _userManager.AddToRoleAsync(user, "Admin").Wait();

     base.OnModelCreating(modelBuilder);
 }

有什么想法吗?我应该使用HasData方法创建用户吗?

1 个答案:

答案 0 :(得分:4)

您的<el-date-picker> 被注入依赖项null,后者被注入依赖项AppDbContext,而依赖项UserManager被注入。因此,您会遇到循环依赖问题。

解决方案是在UserStore之外创建用户,这样就不必将这些服务注入DbContext