ASP.NET EF Core执行update-database成功但SSMS看不到迁移数据库
EF Core迁移成功但SSMS找不到数据库的排查方案
从你贴的执行日志可以直接定位第一个核心问题:日志中Entity Framework Core 6.0.6 initialized 'ApplicationDbContext' [...] with options: None 说明你的DbContext根本没有加载到你配置的连接字符串,走的是EF Core的默认初始化逻辑,根本没连到你以为的数据库实例。
按以下步骤逐一排查:
- 检查DbContext注册逻辑
打开项目的Program.cs,确认你已经正确把配置里的连接字符串注入到DbContext中,正确注册代码参考:
漏写这行注册代码、或者注册时没传连接串,是出现var builder = WebApplication.CreateBuilder(args); // 注册DbContext时必须明确指定用SqlServer+对应连接串 var connStr = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<ApplicationDbContext>(opt => opt.UseSqlServer(connStr));options: None日志的最常见原因。 - 修正连接字符串错误
你当前使用的LocalDB连接串存在两个问题:Server=后面多了一个多余空格,会导致实例解析异常,正确写法为Server=(LocalDb)\\MSSQLLocalDB- 没有指定
Database字段,EF Core默认会用DbContext的全限定类名(即「项目命名空间.ApplicationDbContext」)作为数据库名,不会自动生成你预期命名的库
修正后的连接串参考:
"DefaultConnection": "Server=(LocalDb)\\MSSQLLocalDB;Database=TestProjectDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" - 检查PMC的默认项目配置
打开程序包管理器控制台,确认顶部两个下拉选项配置正确:- 「默认项目」下拉框必须选中包含DbContext、迁移文件的项目
- 「启动项目」必须选中你实际运行的Web/API主项目——只有启动项目才会加载对应的
appsettings.json配置,启动项目选错会直接读不到你写的连接串
- 直接定位LocalDB实例内的所有数据库
不需要猜库的位置,直接执行以下操作连接到正确的LocalDB实例:- 在CMD或者PMC执行
sqllocaldb start MSSQLLocalDB确保实例运行 - 执行
sqllocaldb info MSSQLLocalDB拿到实例对应的命名管道地址 - 打开SSMS连接数据库引擎时,服务器名直接填刚才拿到的管道地址,连接后就能看到实例下所有数据库,找名称包含
ApplicationDbContext的库,就是之前EF默认生成的库
- 在CMD或者PMC执行
- 清理错误配置后重新执行迁移
修正以上配置后,在PMC执行以下命令清理旧的错误迁移记录,重新生成库:
执行完后刷新SSMS里的数据库列表,就能看到新生成的库。# 删除当前配置关联的旧库 Drop-Database # 强制删除之前生成的错误迁移文件 Remove-Migration -Force # 重新生成初始化迁移 Add-Migration InitialCreate # 执行更新,加Verbose参数可以打印实际使用的连接串、执行的所有SQL,方便排查 Update-Database -Verbose
内容的提问来源于stack exchange,提问作者Lukdavicki
相关产品推荐
相关产品推荐

