我应该将啥 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<MyApplicationUser>
)完成的。您可以在需要的地方注入它们。
【讨论】:
以上是关于我应该将啥 DbContext 与 EntityFrameworkCore 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
导入 tkinter 文件时,我应该将啥参数传递给“root”?