我尝试的东西很简单,但无论出于什么原因它都不起作用,因此我在这里看看是否有东西给了我任何光线,我找不到其他地方的例子或解决方案(Bing / google)
问题很简单我使用的是稍微修改过的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;
}
然后最后的方法是&#34;导致&#34;问题:
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;
}
这里发生的事情是,当我查询用户时,我什么也得不到,但至少应该记录当前用户,因为他有正确的businessId。
如果我在用户查询上设置断点并尝试类似&#34; ToList()&#34;或&#34; ToList()[0]&#34;在即时窗口我得到以下内容:
?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().
任何想法为什么,或者是否有&#34;权利&#34;这样做的方式?
由于
答案 0 :(得分:1)
在这里查看How to obtain a list of Users from 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 Identity Sample Project,发现生成的 项目有以下几行:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
而Sample应用程序已将数据库上下文包含在 构造函数。所以我在构造函数中添加了它,重新创建了数据库 问题消失了。