AspNet Core(RC1):使用RoleManager将角色添加到角色

时间:2016-05-20 06:03:04

标签: c# asp.net-core asp.net-identity

我正在将旧会员系统转移到Identity Core RC1。我从旧系统中为每个角色提取了许多声明(最多50个或更多),我需要在新系统中创建相应的角色和相关声明。 问题是当我遍历声明时将它们添加到这样的角色:

await RoleManager.AddClaimAsync(role, claim)

系统会向数据库持续存在一些声明(有时为2次,有时为7次或更多次),然后返回错误:

不允许使用新事务,因为会话中还有其他线程在运行。

或者有时会出现这种错误:

mscorlib.dll中出现'System.AggregateException'类型的异常

其中有4个级别的InnerException,最后一个说:

BeginExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。

使用AddClaimAsync有什么问题吗?我一直在疯狂,无法找到出路。有什么建议吗?

这是代码: - 自定义RoleManager:

public class EMSRoleManager : RoleManager<EMSRole>
    {
        public EMSRoleManager(IRoleStore<EMSRole> store, IEnumerable<IRoleValidator<EMSRole>> roleValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, ILogger<RoleManager<EMSRole>> logger, IHttpContextAccessor contextAccessor) : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
        {
        }
    }

在Startup.cs中:

services.AddIdentity<EMSUser, EMSRole>()
            .AddRoleManager<EMSRoleManager>()
            .AddEntityFrameworkStores<ApplicationDbContext, Guid>();

在我正在使用的服务类中,我注入如下:

private UserManager<EMSUser> _userManager;
private LegacyIdentityContext _legacyDb;
private EMSRoleManager _roleManager;

public LoginService(UserManager<EMSUser> userManager, LegacyIdentityContext legacyIdentity, EMSRoleManager roleManager )
{
    _userManager = userManager;
    _legacyDb = legacyIdentity;
    _roleManager = roleManager;
}

然后,根据声明列表,我使用它将它们添加到角色中:

for (int i = 0; i < claims.Count; i++)
{
    await _roleManager.AddClaimAsync(newRole, claims[i]);
}

这是它破裂的地方。 谢谢你的帮助。

0 个答案:

没有答案