我正在尝试在 ASP.NET 核心标识和域模型中的实体之间实现良好的分离和体系结构。
我在使用 ASP.NET Core 构建的 Web 应用程序中使用 Onion 架构。 在核心项目中,Domain
,我有域模型,其中一个是Member
实体。
然后在另一个项目中,Infrastructure
,我内置了 ASP.NET 核心身份设置,其中包含一个继承自IdentityUser
的ApplicationUser
类。
public class ApplicationUser : IdentityUser
{
}
将标识用户和成员实体分开的想法很好。 但是,我想将它们联系起来,但使用实体框架核心这似乎是一个挑战。如果不在我的域模型中添加导航属性,我就无法解决这个问题,我想避免这种情况。
我希望我可以完全使用 Fluent API 来完成它,而无需添加属性,但事实似乎并非如此。
关于如何处理这个问题的任何建议? 考虑到上述情况,如何在不从核心项目添加依赖项的情况下在标识用户和域实体之间创建关系?
我的问题有些重复或与这里的一些帖子有关,例如
- 将 ASP.NET 身份与核心域模型分离 - 洋葱架构
- 洋葱架构标识框架
- 为数据层中的实体添加与 .NET 标识应用程序用户的关系
以及其他一些帖子。但是,这些问题的答案似乎是解决方法。也许这是唯一的方法?
我正在这个项目中使用 ASP.NET 核心 3.1 和实体框架 3.1。
我有同样的业务需求,我需要将 Identity 与其他域模型分开,我决定遵循以下模式:
1-创建/注册新用户时,我们将在身份表中添加身份数据
2-我们将在域模型中添加其他业务数据,例如教师/学生表
3-现在我们需要在两者之间建立关系 我们可以通过在"UsersClaims"标识表中向用户添加声明来做到这一点,默认情况下,该标识表具有以下属性(UserId,ClaimType,ClaimValue(,因此我们将添加具有标识ID的域模型ID
通过这样做,我们在身份域之间建立了虚拟关系
这是一种方式,你可以在域模型构建映射表的另一侧执行此操作,保存相同的数据(identityUserId & domainUserId(
然后,如果需要,您可以将它们分隔到不同的数据库中
作为接口的域模型怎么样?
因此,您在域项目(和其他类型...(中有一些IMember,在DAL层中,您获得了带有一组成员:IMember(以及所有其他类型,即。博客:IBlog等(。
并为 Identity 创建单独的项目,使用 IdentityDbContext,其中 MemberIdentiy :IdentityUser、IMember。
此外
由于您的域具有IMemberRepository,ISomeEntityRepository等,并且ISomeEntity具有IMember prop,因此您可以在DAL中分别实现SomeEntityRepository,并在Identity项目中分别实现MemberRepository。
您可以决定两个上下文是否使用相同的数据库。