我应该将啥 DbContext 与 EntityFrameworkCore 一起使用?

Posted

技术标签:

【中文标题】我应该将啥 DbContext 与 EntityFrameworkCore 一起使用?【英文标题】:What DbContext should I use with EnityFramework Core?我应该将什么 DbContext 与 EntityFrameworkCore 一起使用? 【发布时间】:2019-04-12 05:45:39 【问题描述】:

我有带有 EFCore 的 .Net Core 应用程序。我创建了继承自 IdentityDbContext 的 ApplicationDbContext 类。

我想使用 AspNetUsers DbSet 进行授权和身份验证。然后在 powershell 控制台中,我输入了“更新数据库”,在我的 PostgreSQL 数据库中,我看到了一些表,包括 AspNetRoles、AspNetUsers 等,但在项目中我只有空的 ApplicationDbContext。

那我该怎么办?我可以将 DB 中的所有实体构建为对象模型或扩展 IdentityDbContext 并以某种方式将属性添加到 aspNetUsers。此外,如果我搭建实体,我将获得另一个新的 DbContext,其中包含所有 AspNetUsers 和其他人。

【问题讨论】:

Entity Framework 使用DbContext,所有IdentityDbContext 都是继承DbContext 的实现,以处理内置的Microsoft 授权和身份验证机制。那么你应该使用哪个DbContext 是什么意思? 根据您的要求和表的数量,您可以考虑创建多个 DbContext(s)。拥有God Context 会导致许多编程问题。 【参考方案1】:

如果您可以使用IdentityUser 的标准实现,那么只需从非通用IdentityDbContext 继承dbContext。 如果您想使用自定义 User 类为 Identity 创建 dbContext,您需要从通用抽象类 IdentityDbContext<T> 继承您的自定义 dbContext 类,其中 T 是您的自定义 User 实现。这个实现应该继承自 .NET IdentityUser 类已经提供的。 您还需要通过以下代码将 dbContext 与 Startup.cs 中的 Identity 关联起来:

services.AddIdentity<MyCustomUser, IdentityRole>()
                .AddEntityFrameworkStores<MyCustomSecurityContext>()...

我也不知道你为什么要直接使用你的身份上下文。通常所有与用户、角色、声明的工作都是通过隐藏实现并提供漂亮和清晰 API 的特定服务(例如 UserManager&lt;MyApplicationUser&gt;)完成的。您可以在需要的地方注入它们。

【讨论】:

以上是关于我应该将啥 DbContext 与 EntityFrameworkCore 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

EF CORE学习笔记 配置Dbcontext

我应该将啥作为参数传递给期望 NSError** 的方法?

导入 tkinter 文件时,我应该将啥参数传递给“root”?

我应该将啥类型添加到作为参数接收的类构造函数中?

我应该将啥对象传递给需要 Void 的函数!在参数中? (科特林)

我应该使用 oauth2 jwt 授权将啥存储到数据库中?