首页 > 解决方案 > 使用 ASP.NET core Identity 时,最好扩展 User 类或编写与之相关的单独实体

问题描述

我想使用 ASP.NET 核心提供的身份系统。我阅读的大多数教程都通过添加如下自定义属性来扩展 User 类:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    // etc...
}

当您只有很少的属性时,这似乎很好。但是,如果我想添加一长串其他属性,例如它们的完整地址、成员资格等,该怎么办?

从设计的角度来看,编写存储这些自定义属性的单独实体并在 ApplicationUse 类中添加可用于访问这些实体的导航属性是否更好(甚至可能),如下所示:

public class ApplicationUser : IdentityUser
{
    public Address Address { get; set; }
    public IEnumerable<Membership> Memberships { get; set; }
    // Other navigation properties
}

大多数专业开发人员如何处理这个问题?我是编程新手,并在业余时间学习它以找到一份软件开发工作。

标签: c#asp.net-core

解决方案


考虑这些属性是否需要与ApplicationUser.

例如,将不可能Address独立存在并拥有自己的密钥。换句话说,您可能不需要Address在多条记录之间共享一条ApplicationUser记录。这意味着您可能不需要Addresses桌子。对于这样的属性,请考虑使用Owned Entity Types

但是,Membership记录可能需要独立存在并拥有自己的密钥。它可能是一条ApplicationUser记录和另一条记录(如 a Group)之间的连接,带有有效负载(如 anExpirationDate或 a Cost)。这意味着您可能需要一个Memberships连接表。对于这样的属性,请考虑使用多对多关系。


推荐阅读