编辑:此问题已过时
身份框架在我问这个时刻是一个移动的目标。作者改变了很多事情,他们已经解耦了几件事情,使事情更容易。
看看Asp.NET Identity Sample project on github。
我正在创建一个需要用户管理的小应用程序。不允许注册,而是有一个超级用户将创建和修改登录信息。
我使用新的ASP.NET Identity成员系统,并且确定,创建用户和添加角色是容易和直观。
现在,我的问题:如何获取使用AuthenticationIdentityManager类,生成的AccountController类使用的用户列表?我找不到从我的控制器访问用户列表的方法。
(顺便说一下,新名字“身份”可能听起来真棒的一些人,但它是一个痛苦寻找)。
编辑:如果我尝试这样做
ApplicationDbContext UsersContext = new ApplicationDbContext(); UsersContext.Users.ToList(); // Exception
我得到一个异常列名“Discriminator”无效。 ApplicationDbContext的定义由新的应用程序向导自动生成:
using Microsoft.AspNet.Identity.EntityFramework; namespace Cobranzas.Models { public class ApplicationUser : User { } public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser> { } }
所以我的猜测是Discriminator列是用于从User分离ApplicationUser。但是,它不存在于我的数据库(由应用程序自动创建)。
解决方法
我发现我没有使用派生的ApplicationUser对象的任何东西,所以我只是继续改变它的所有用途为普通老用户。然后我只是改变了ApplicationDbContext的定义为:
public class ApplicationDbContext : IdentityDbContext< User,UserClaim,UserSecret,UserLogin,Role,UserRole,Token,UserManagement> { }
现在我可以访问用户列表:
UsersContext = new ApplicationDbContext(); ... UsersContext.Users.ToList();
但是,我认为这会回来,困扰我在将来(我可能需要添加更多的字段给用户),所以可能我必须使用相同的方法,在这个问题:
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()));