使用 linq 从 IdentityUser 列表中检索自定义配置文件数据
Posted
技术标签:
【中文标题】使用 linq 从 IdentityUser 列表中检索自定义配置文件数据【英文标题】:Retrieve custom profile data from IdentityUser list with linq 【发布时间】:2020-02-20 01:37:50 【问题描述】:带有身份的 ASP.Net Core 3 MVC Web 应用程序
我的数据库上下文是
public class ApplicationDbContext : IdentityDbContext
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
etc...
因此,来自 IdentityUserContext 的用户是一个公共虚拟 DbSet,并被实例化为
DbSet
用户
但是,我定义了ApplicationUser : IdentityUser
来定义我自己的个人资料数据。
public class ApplicationUser : IdentityUser
[Display(Name = "Is Manager")]
public bool IsSupervisor get; set;
etc....
所以,我在 startup.cs 中将服务配置为:
services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true)
我已将我的 UserManager 设置为
私有只读 UserManager _userManager
但是当我尝试使用 LINQ 根据我的自定义配置文件信息(在对控制器的记录“详细”调用中)使用 LINQ 访问和过滤用户记录时,我被告知这些自定义属性不可用:
var managers = new List<SelectListItem>();
managers.AddRange(_context.Users.Where(x => x.IsSupervisor == true).Select(manager => new SelectListItem
Text = manager.DisplayName,
Value = manager.Id.ToString()
).ToList());
ViewBag.ManagersList = managers;
/Users/robert/Projects/mvc/Vacate/Controllers/EmployeesController.cs(59,59):错误 CS1061:“IdentityUser”不包含“IsSupervisor”的定义,并且没有可访问的扩展方法“IsSupervisor”接受可以找到“IdentityUser”类型的第一个参数(您是否缺少 using 指令或程序集引用?)(CS1061)(Vacate)
那么,在不使用单独的表来存储配置文件信息的情况下,有没有办法对访问您的自定义配置文件成员的用户使用 LINQ?将“演员”用户排序为 LINQ 调用中的正确 ApplicationUser 类型?或者我在设置 ApplicationUser 类以在 Identity 中使用时遗漏了什么?
【问题讨论】:
【参考方案1】:你应该让你的默认ApplicationDbContext
使用新的ApplicationUser
:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
更新您的数据库:Add-migration
,Update-Database
。
【讨论】:
以上是关于使用 linq 从 IdentityUser 列表中检索自定义配置文件数据的主要内容,如果未能解决你的问题,请参考以下文章