首页 > 解决方案 > 分离 ASP.NET Core Identity ApplicationUser 与域模型实体的关系

问题描述

我试图在我的域模型中的 ASP.NET Core 标识和实体之间实现良好的分离和架构。

我在使用 ASP.NET Core 构建的 Web 应用程序中使用 Onion 架构。在核心项目中Domain,我有域模型,其中一个是Member实体。

然后在另一个项目中Infrastructure,我有内置的 ASP.NET Core Identity 设置,其中包含一个ApplicationUser继承自IdentityUser.

    public class ApplicationUser : IdentityUser
    {
    }

将身份用户和成员实体分开的想法很好。但是,我想将它们联系起来,但使用 Entity Framework Core 这似乎是一个挑战。如果不在我的域模型中添加导航属性,我就无法解决这个问题,我想避免这种情况。

我希望我可以完全使用 Fluent API 来完成它而无需添加属性,但似乎并非如此。

关于如何解决这个问题的任何建议?考虑到上述情况,如何在不从核心项目添加依赖项的情况下创建身份用户和域实体之间的关系?

我的问题有点重复或与这里的一些帖子有关,例如

以及其他一些帖子。然而,这些问题的答案似乎是变通方法。也许这是唯一的方法?

我正在使用 ASP.NET Core 3.1 和 Entity Framework 3.1。对于这个项目。

标签: c#asp.net-coreentity-framework-coreasp.net-identityonion-architecture

解决方案


我有同样的业务需求,我需要将身份与其他领域模型分开,我决定遵循以下模式:

1-创建/注册新用户时,我们将在身份表中添加身份数据

2-我们将在我们的域模型中添加其他业务数据,比如说教师/学生表

3-现在我们需要建立两者之间的关系,我们可以通过在“UsersClaims”身份表中向用户添加声明来做到这一点,该表默认具有以下属性(UserId、ClaimType、ClaimValue),因此我们将添加我们的域模型 ID有身份证

通过这样做,我们在身份域之间建立了虚拟关系

这是一种方法,您可以在域模型构建映射表的另一侧执行此操作,保存相同的数据(identityUserId 和 domainUserId)

然后,您可以根据需要将它们分隔在不同的数据库中


推荐阅读