客户和员工的 efcore 身份

Identity with efcore for customer and staff

我目前为我的电子商务应用程序的客户和员工设计 table,并且我正在使用 asp.net 核心标识。我想知道我是否应该为员工和客户使用 1 table 用户(又名 aspnetuser),还是应该将它们分开并使用用户 ID 作为外键?如果用外键将它们分开 2 new table 是用户 ID,我如何使用用户管理器为员工和客户创建帐户? 谢谢。

您可以扩展基础 IdentityUser class 以创建具有附加字段的 table,例如:

public class MyIdentityUser : IdentityUser<string>
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Type { get; set; }
...

其中 Type 字段可以是 StaffCustomer

或者您可以使用一个或多个额外的 table 并使用 IdentityUser class 中定义的 Id 来自 Microsoft.ASpNetCore.Identity:

    public class IdentityUser<TKey> where TKey : IEquatable<TKey>
    {
        /// <summary>
        /// Initializes a new instance of <see cref="IdentityUser{TKey}"/>.
        /// </summary>
        public IdentityUser() { }

        /// <summary>
        /// Initializes a new instance of <see cref="IdentityUser{TKey}"/>.
        /// </summary>
        /// <param name="userName">The user name.</param>
        public IdentityUser(string userName) : this()
        {
            UserName = userName;
        }

        /// <summary>
        /// Gets or sets the primary key for this user.
        /// </summary>
        [PersonalData]
        public virtual TKey Id { get; set; }
...

您可以定义 Id 字段的类型,就像我之前的示例一样,并在自定义 table/tables 中的相关字段(例如 IdentityUserId)上使用相同的类型。

如果扩展基础 IdentityUser class,则需要使用此声明创建派生上下文,如下所示:

namespace MyProject.Infrastructure.Contexts
{
    public class MyContext : IdentityDbContext<MyIdentityUser>
    {
...