gpt4 book ai didi

asp.net-mvc - 自定义 RoleProvider 不断缓存我的存储库对象

转载 作者:行者123 更新时间:2023-12-01 09:05:02 25 4
gpt4 key购买 nike

我已经为一个项目实现了一个自定义 RoleProvider。 RoleProvider 有效,但我用来获取用户角色的存储库仅在构建后填充。当我注销时,更改用户的角色,再次登录,用户仍然拥有旧角色。

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();
}
}

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

是否存在缓存问题?谁能帮我解决这个问题。

最佳答案

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();
}
}
}

您的方法的问题是上下文跟踪加载的用户。当您询问已被上下文跟踪的用户时,将返回现有实例。因此返回与之关联的 UserRoles

关于asp.net-mvc - 自定义 RoleProvider 不断缓存我的存储库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com