c# - 使用 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
}
大多数专业开发人员如何处理这个问题?我是编程新手,并在业余时间学习它以找到一份软件开发工作。
解决方案
考虑这些属性是否需要与ApplicationUser
.
例如,将不可能Address
独立存在并拥有自己的密钥。换句话说,您可能不需要Address
在多条记录之间共享一条ApplicationUser
记录。这意味着您可能不需要Addresses
桌子。对于这样的属性,请考虑使用Owned Entity Types。
但是,Membership
记录可能需要独立存在并拥有自己的密钥。它可能是一条ApplicationUser
记录和另一条记录(如 a Group
)之间的连接,带有有效负载(如 anExpirationDate
或 a Cost
)。这意味着您可能需要一个Memberships
连接表。对于这样的属性,请考虑使用多对多关系。
推荐阅读
- mysql - SQL 查询仅显示 28 个预期行中的 14 个
- apostrophe-cms - 在 PHP 页面检查 ApostropheCMS 登录用户
- android - groupie 适配器在应用程序发布中未绑定到 recyclerView,但在调试中工作
- powershell - 在 Powershell 中比较数组
- c# - 如何将我的列表<> 数据转换为以下类?
- python - 同时优化两种不同的功能,为两者提供通用的解决方案
- r - 使用 scale_color_binned(guide = guide_legend()) 时缺少一些图例项
- r - 如何用以前的状态替换单个出现
- python - 多项式乘法分而治之 Python
- javascript - 无法通过道具将事件处理程序发送到子元素