我尝试了一些非常简单的东西,但无论出于什么原因,它都不起作用,因此我在这里想看看是否有什么东西能给我带来光明,但我在其他地方找不到例子或解决方案(Bing/谷歌)
问题很简单,我使用的是一个稍微修改过的ApplicationUser类:
public class ApplicationUser : IdentityUser
{
public virtual Guid BusinessId { get; set; }
}
使用以下助手(扩展方法):
public static Guid GetBusinessId(this IIdentity user)
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var currentUser = manager.FindById(user.GetUserId());
return currentUser.BusinessId;
}
最后是"导致"问题的方法:
public IQueryable<ApplicationUser> Get()
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
Guid businessId = this.User.Identity.GetBusinessId();
var users = userManager.Users.Where(u => u.BusinessId == businessId);
return users;
}
这里发生的情况是,当我查询Users时,我什么也得不到,但它至少应该得到当前登录的User,因为他有正确的businessId。
如果我在用户查询上设置一个断点,并在即时窗口上尝试类似"ToList()"或"ToList[0]"的操作,我会得到以下结果:
?users.ToList()
Count = 1
[0]: Could not evaluate expression
?users.ToList()[0]
An internal error has occurred while evaluating method System.Collections.Generic.List`1[T].get_Item().
有什么想法吗?或者有"正确"的方法吗?
感谢
看看这里如何从ASP.NET Identity获取用户列表?根据答案计算
我发现我没有将派生的ApplicationUser对象用于任何用途,所以我只是继续将它的所有用途更改为普通老用户。然后我刚刚更改了ApplicationDbContext的定义对于以下内容:
public class ApplicationDbContext : IdentityDbContext< User, UserClaim, UserSecret, UserLogin, Role, UserRole, Token, UserManagement> { }
现在我可以访问用户列表:
UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();
然而,我认为这会在未来再次困扰我(我会可能需要向User添加更多字段),所以我可能必须使用与这个问题相同的方法:
获取ASP.NET MVC5标识系统中的所有角色名称
编辑:由于我需要添加一处新房产,我不得不恢复我的更改。因此,我继续与ASP.NET标识示例项目,并发现生成的该项目有以下路线:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
而Sample应用程序在构造函数。所以我把它添加到我的构造函数中,重新创建了数据库然后问题就解决了。