【发布时间】:2019-12-29 11:40:25
【问题描述】:
我正在尝试在我的域模型中实现 ASP.NET Core 标识和实体之间的良好分离和架构。
我在使用 ASP.NET Core 构建的 Web 应用程序中使用 Onion 架构。
在核心项目Domain 中,我有域模型,其中一个是Member 实体。
然后在另一个项目 Infrastructure 中,我有内置的 ASP.NET Core Identity 设置,其中包含一个继承自 IdentityUser 的 ApplicationUser 类。
public class ApplicationUser : IdentityUser
{
}
将身份用户和成员实体分开的想法很好。 但是,我想将它们联系起来,但使用 Entity Framework Core 这似乎是一个挑战。如果不在我的域模型中添加导航属性,我就无法解决这个问题,我想避免这种情况。
我希望我可以完全使用 Fluent API 而无需添加属性,但似乎并非如此。
关于如何解决这个问题有什么建议吗? 考虑到上述情况,如何在不从核心项目添加依赖项的情况下创建身份用户和域实体之间的关系?
我的问题有些重复或与此处的某些帖子有关,例如
- Decoupling ASP.NET Identity from the Core Domain Models - Onion Architecture
- Onion Architecture Identity Framework
- Add relationship to .NET Identity ApplicationUser for entity in Data layer
还有其他一些帖子。然而,这些问题的答案似乎是变通方法。也许这是唯一的方法?
我正在使用 ASP.NET Core 3.1 和 Entity Framework 3.1。对于这个项目。
【问题讨论】:
-
我认为你所说的“域层”实际上是 EF 持久层。无论如何,我非常喜欢完全分离这两个模型,并且只在数据库中创建 1:1 关联而不更改 Identity 表结构。当 IdentityUser 通过 Identity 登录时,您可以使用其 ID 在实际应用程序中与 Member 实体一起工作。这将使身份验证/授权和“真正的”业务很好地分离。
-
嗨@GertArnold,感谢您的反馈。我不知何故需要将两者联系起来,我正在探索 EF Core 的选项,但我还没有找到一种方法来做到这一点,而不将其引入域层。我会以某种方式需要在 Identity 表中有一个外键,以便将其与成员相关联。 Infrastructure 项目包含 EF 持久性逻辑和 Identity 作为外部关注点,而 Domain 包含实体和相关的域逻辑。
-
@brk 你最终解决了这个问题吗?我现在正在经历它并解决了您链接到的所有问题,但没有取得太大成功。. 基本上我不知道如何处理我的核心项目中的 AppUser ,它必须从 IdentityUser 继承,但核心项目不应该有身份依赖
标签: c# asp.net-core entity-framework-core asp.net-identity onion-architecture