ASP.NET Core 2.0添加身份认证遇阻,求助迁移及解决方法
解决ASP.NET Core 2.0添加Identity后无法触发迁移的问题
别着急,自动迁移提示没出来是很常见的情况,咱们直接手动操作就能搞定,我给你一步步捋清楚:
先确认基础配置没出错
首先再核对下核心配置是否到位:
- 确保
MyOwnDbContext确实继承自IdentityDbContext<ApplicationUser>,而且ApplicationUser是继承IdentityUser的(哪怕没自定义字段,这个基础继承关系不能少) - 检查
Startup.cs的ConfigureServices里,DbContext的注册要放在Identity服务之前,顺序错了会导致Identity识别不到对应的上下文,示例代码如下:// 先注册数据库上下文 services.AddDbContext<MyOwnDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); // 再注册Identity服务 services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<MyOwnDbContext>() .AddDefaultTokenProviders();
手动触发迁移命令
自动提示没出来没关系,咱们直接用命令行手动创建并应用迁移:
如果你用Visual Studio的Package Manager Console
打开「工具」→「NuGet包管理器」→「包管理器控制台」,依次执行:
Add-Migration InitialIdentitySetup Update-Database
这里InitialIdentitySetup是迁移的自定义名称,你可以改成自己好记的,比如AddIdentityCoreTables都行。
如果你用.NET CLI(终端/命令提示符)
切换到你的Web项目根目录(就是包含.csproj文件的文件夹),然后执行:
dotnet ef migrations add InitialIdentitySetup dotnet ef database update
排查可能的坑
如果执行命令报错,先检查这几个常见问题:
- 连接字符串
DefaultConnection是否正确指向了你的数据库,服务器能否正常访问? - 包管理器控制台的「默认项目」是不是选了你的Web项目?别误选成类库项目
- 项目有没有编译错误?先把所有编译错误解决后再跑迁移命令
- 如果之前有过旧迁移导致冲突,可以加
-Force参数覆盖(比如Add-Migration InitialIdentitySetup -Force),但注意操作前备份现有数据
实在不行的备选方案
要是迁移命令还是搞不定,你可以直接生成SQL脚本手动执行:
dotnet ef migrations script InitialIdentitySetup
把输出的SQL脚本复制到你的数据库管理工具(比如SSMS、DBeaver)里执行,一样能创建Identity需要的所有核心表(AspNetUsers、AspNetRoles、AspNetUserRoles等)。
内容的提问来源于stack exchange,提问作者Jeroen
相关产品推荐
相关产品推荐

