如何从 ASP.NET Core Identity 类 访问其他实体?

How to access other entities from ASP.NET Core Identity classes?

ASP.NET Core 的新手。我正在使用 Identity 框架进行身份验证,在其他 Register razor 页面中搭建脚手架。在 Register.cshtml.cs 中,我想要获取用于填充下拉菜单的数据。数据位于 Entity Framework 表的另一部分。所以目的是能够 select 例如注册用户时的“公司”。

我不太喜欢 fiddle 太多 Register.cshtml.cs,即修改构造函数以获取我自己的服务 and/or 上下文对象。但是如何从那个页面访问“我自己的”表格呢?

可以吗?或者不应该这样做(为什么?)?如果没有,关于将此一般用户管理内容与身份框架结合使用有什么建议吗?

谢谢,

帕勒

ASP.NET Core Identity 用于管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。我们可以使用UserManager, RoleManager and SignInManager来管理下面的表:

有关身份的更多详细信息,请参阅 Identity on ASP.NET Core

要访问其他 Entity Framework 表,我认为您必须使用 Register.cshtml.cs 中的数据库上下文,如下所示:

public class RegisterModel : PageModel
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly ILogger<RegisterModel> _logger;
    private readonly IEmailSender _emailSender;

    private readonly ApplicationDbContext _context;

    public RegisterModel(
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager,
        ILogger<RegisterModel> logger,
        ApplicationDbContext context,
        IEmailSender emailSender)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _logger = logger;
        _context = context;
        _emailSender = emailSender;
    }

    [BindProperty]
    public InputModel Input { get; set; }

    public string ReturnUrl { get; set; }
    [BindProperty]
    public List<Company> Companies { get; set; }
    public IList<AuthenticationScheme> ExternalLogins { get; set; }


    public class InputModel
    {
         ...
    }

    public async Task OnGetAsync(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
        Companies = _context.Companies.ToList(); //get all companies from database.
    }

此外,如果您仍然不想使用数据库上下文。您可以考虑使用固定选项列表或使用枚举列表来设置 select 项目,而不是从数据库中获取它们。