自定义ASP.NET Core Identity类后,如何最简创建表关系?
在ASP.NET Core 2中自定义Identity类后自动创建表关系的最简方法
我之前踩过这个坑!其实解决起来特别省心,核心就是让你的数据库上下文正确继承带泛型参数的IdentityDbContext,把你自定义的那些Identity类都明确传进去,EF Core就能自动识别并创建所有表之间的关联关系了。
具体操作步骤如下:
- 调整你的DbContext继承结构,传入对应泛型参数(顺序要对应:用户类、角色类、主键类型、用户声明类、用户角色关联类、用户登录类、角色声明类、用户令牌类),代码示例:
public class AppDbContext : IdentityDbContext< User, Role, int, UserClaim, IdentityUserRole<int>, IdentityUserLogin<int>, RoleClaim, IdentityUserToken<int>> { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } // 这里可以添加你自己的其他业务实体DbSet }
原理说明:默认的
IdentityDbContext用的是微软自带的Identity基础类,当你自定义了User、Role、UserClaim这些类后,必须明确告知EF Core使用这些自定义类以及对应的关联实体,它才能自动生成正确的外键和表间关系。如果之前已经生成过迁移文件,记得先清理旧迁移再重新生成生效:
# 移除之前的旧迁移 Remove-Migration # 生成新的初始化迁移 Add-Migration InitialCreate # 更新数据库,让表关系生效 Update-Database
要是你不想写这么长的泛型,也可以在OnModelCreating方法里手动配置每一个表的关联关系,但显然继承正确的泛型是最省心、最简的方式,不用自己写一堆繁琐的配置代码。
内容的提问来源于stack exchange,提问作者x19
相关产品推荐
相关产品推荐

