自定义RoleProvider保持缓存我的存储库对象

jpd*_*ooy 3 asp.net-mvc entity-framework roleprovider

我为项目实现了一个自定义RoleProvider.RoleProvider可以工作,但我用来获取用户角色的存储库仅在构建后填充.当我logOff,更改用户的角色,再次登录时,用户仍然保留旧角色.

public class CmsRoleProvider : RoleProvider
{
    private EntityDB _db { get; set; }

    public CmsRoleProvider()
    {
        _db = new EntityDB();
    }

    public override string[] GetRolesForUser(string username)
    {
        var user = _db.Users.Where(u => u.EmailAddress == username).SingleOrDefault();
        var roles = user.UserRoles.Select(u => u.Role.Name).ToList<string>();

        return roles.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,用户只在构建项目后才能获得正确的角色.当我在GetRolesForUser函数中创建存储库时,它工作正常.

是否存在缓存问题?谁可以帮助我.

Era*_*nga 7

ASP.NET仅创建RoleProvider的单个实例.因此,你的背景也很长寿.最好有短暂的环境.

public class CmsRoleProvider : RoleProvider
{        
    private EntityDB GetContext()
    {
       return new EntityDB();
    }

    public override string[] GetRolesForUser(string username)
    {
        using(var db = GetContext())
        {
            var user = db.Users.Where(u => u.EmailAddress == username)
                          .SingleOrDefault();
            var roles = user.UserRoles.Select(u => u.Role.Name).ToList<string>();

            return roles.ToArray();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您的方法的问题是上下文跟踪加载的用户.当您要求已由上下文跟踪的用户时,将返回现有实例.因此UserRoles返回与之相关联的内容.