编辑:这个问题已经过时了
在我问这个时,身份框架是一个移动目标。作者改变了很多东西,他们将其他几个分开,使一切变得更容易。
看看Asp.NET Identity Sample project on github。
我正在创建一个需要用户管理的小应用程序。不允许注册,而是有超级用户将创建和修改登录信息。
我正在使用新的ASP.NET Identity会员系统,当然,创建用户和添加角色非常简单直观。
现在,我的问题:如何使用生成的AccountController类使用的AuthenticationIdentityManager类获取用户列表?我找不到从我的控制器访问用户列表的方法。
(顺便说一句,新名称“身份”对某些人来说可能听起来很棒,但搜索却很痛苦。)
编辑:如果我尝试这样做
ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception
我得到一个例外Invalid column name 'Discriminator'
。 ApplicationDbContext的定义由新的应用程序向导自动生成:
using Microsoft.AspNet.Identity.EntityFramework;
namespace Cobranzas.Models
{
public class ApplicationUser : User
{
}
public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
{
}
}
所以我的猜测是Discriminator
专栏是为了告诉ApplicationUser
User
。但是,它在我的数据库中不存在(由应用程序自动创建)。
我发现我没有使用派生的ApplicationUser
对象做任何事情,所以我继续前进并改变它对普通老User
的所有用途。然后我就改变了以下的ApplicationDbContext
定义:
public class ApplicationDbContext : IdentityDbContext<
User, UserClaim, UserSecret, UserLogin,
Role, UserRole, Token, UserManagement>
{
}
现在我可以访问用户列表:
UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();
但是,我认为这将会回来并在将来困扰我(我可能需要向User
添加更多字段)所以我可能必须使用与此问题相同的方法:
Get all role names in ASP.NET MVC5 Identity system
编辑:由于我需要添加一个新属性,我不得不恢复我的更改。所以我继续与ASP.NET Identity Sample Project进行逐行比较,发现生成的项目有以下几行:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
而Sample应用程序已在构造函数中包含数据库上下文。所以我在构造函数中添加了它,重新创建了数据库,问题就消失了。
IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
ASP .NET MVC5
项目ASP .NET Identity
表并更改连接字符串。AccountController
B.创建任何虚拟方法并放在那里var context = new ApplicationDbContext(); var allUsers = context.Users.ToList();
对于RTM,您必须下载到DbContext
或您的特定商店实现必须枚举所有用户的任何内容。在下一个版本中,我们很可能会在Manager类上添加一个可选的IQueryable
用户/角色方法,这些方法可以实现为用户和商店公开IQueryables
。
using System.Linq;
using System.Data;
using System.Data.Entity;
var db = new ApplicationDbContext();
var Users = db.Users.Include(u => u.Roles);
如果我们可以在Constructor
Identity
中使用以下类型的AccountController
。
public AccountController(ApplicationUserManager userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
然后我们可以直接使用UserManager
对象来获取用户列表
var userList= UserManager.Users.ToList();