【发布时间】:2014-04-29 06:39:58
【问题描述】:
我尝试了一些非常简单的东西,但无论出于何种原因它都不起作用,因此我在这里看看是否有什么能给我带来启示,我在其他地方找不到示例或解决方案(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;
}
最后是“导致”问题的方法:
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。
如果我在用户查询上设置断点并在即时窗口上尝试“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().
任何想法为什么,或者是否有这样做的“正确”方式?
谢谢
【问题讨论】:
-
什么是内部错误(内部异常)?
-
我也不例外,你在上面看到的是我完全复制和粘贴的直接窗口的结果。
-
您是否检查过 businessId 的值是否有效? (例如不是 Guid.Empty)
-
是的,我做到了,它确实有一个值在 SQL 管理器上执行以确认它应该返回一条记录
标签: c# asp.net asp.net-mvc asp.net-identity