我有一个网站,我有客户和运营商。两者都需要注册。客户来自IdentityUser,并扩展了所有类型的客户信息字段,如地址和生日。对于运营商,我需要完全不同的信息,例如部门。
首先,我有一个ApplicationUser对象(派生自IdentityUser),一个Customer对象,引用了ApplicationUser对象(1:1关系,未强制执行),一个Operator对象也引用了ApplicationUser对象。
我想知道这是否正确。我想知道是否不可能有一个从IdentityUser派生的CustomerUser对象和一个也是从IdentityUser派生的OperatorUser对象。
基本上问题是如何使用AspNet Identity在MVC6 ASPNet5应用程序中处理几种类型的用户。我特别没有考虑如何使用角色,因为仍然没有回答如何处理不同的属性集。
答案 0 :(得分:2)
你问的是构图与继承的经典问题。通常,这里最好的建议是更喜欢组合而不是继承。有时组合似乎不直观......我们的大脑倾向于“运营商 用户”和“客户 用户”的心理模型。但您可以轻松地将关系建模为“拥有用户凭据”的客户/运营商(或其他系统角色)。
很难说一个比另一个更正确,但使用组合将更好地适应EF的ORM阻抗不匹配,而不是实体模型的类层次结构。在查询时,您必须更加小心地建模关系(方向性,基数等)和空引用。