【问题标题】:Identity on ASP.NET Core AspNetUsersASP.NET Core AspNetUsers 上的身份
【发布时间】:2020-04-20 22:18:16
【问题描述】:

我刚开始使用身份,我对 AspNetUsers 主键有概念上的疑问。默认 PK 是 nvarchar(450),这应该在系统上识别此帐户。所以我怀疑在现实世界的应用程序中,这个 PK 在其他系统表中用作 FK 来识别帐户?或者正常的做法是让某种中间用户具有 PK 作为 int 并且 FK 是 nvarchar 值?另一件事,关于在其他表中将 nvarchar 作为 FK 的搜索性能?

【问题讨论】:

    标签: c# asp.net-identity


    【解决方案1】:

    您开始使用的基类是 IdentityUser,但您是正确的,因为它使用字符串作为 PK。此默认值映射到注册时提供的电子邮件地址,这使事情变得更加复杂。不适合在任何地方用作 FK。

    我更喜欢 PK 的 Int 值,但您也可以将其设置为其他值,并且 GUID 很常见。

    See this thread for further details.,您可以将其描述中的GUID 替换为int,并让EF Core 管理迁移以将您带到您需要的位置。只要确保您在需要的任何地方都更新 ApplicationUser ,否则事情会变得相当粗糙。

    然后,如果您有任何需要将帖子与用户相关联(例如),您可以通过数字 PK 来完成,并将个人信息(电子邮件)保密,以防用户将其删除仍然附有号码。

    【讨论】:

      【解决方案2】:

      您始终可以扩展基本 Identity 类。 我已经这样做了:

      public interface IUser : IAssetsBase
      {
          int SiteId { get; set; }
          Site Site { get; set; }
          string Token { get; set; }
      }
      
      public class User : IdentityUser<int>, IUser
      {
          [PersonalData]
          public bool Active { get; set; } = true;
          [PersonalData]
          public DateTime DateCreated { get; set; } = DateTime.Now;
          [PersonalData]
          public DateTime? DateDeleted { get; set; }
          [PersonalData]
          public Guid UId { get; set; } = Guid.NewGuid();
          [PersonalData]
          public int SiteId { get; set; }
          [PersonalData]
          public virtual Site Site { get; set; }
          [PersonalData]
          public string Token { get; set; }
      }
      
      public interface IAssetsBase
      {
          int Id { get; set; }
          bool Active { get; set; }
          Guid UId { get; set; }
          DateTime DateCreated { get; set; }
          DateTime? DateDeleted { get; set; }
      }
      
      public abstract class AssetsBase : IAssetsBase
      {
          public int Id { get; set; }
          public bool Active { get; set; } = true;
          public Guid UId { get; set; } = Guid.NewGuid();
          public DateTime DateCreated { get; set; } = DateTime.Now;
          public DateTime? DateDeleted { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 2018-07-07
        • 2017-07-26
        • 2017-03-30
        • 2018-06-25
        相关资源
        最近更新 更多