ASP.NET Core 2中EF Core 2迁移Update-Database连接SQL Server失败
解决ASP.NET Core 2 + EF Core 2 Update-Database连接字符串无效问题
我来帮你一步步排查这个问题,毕竟EF Core刚上手的时候,连接字符串和迁移的坑确实容易踩😉
首先聚焦核心错误:连接字符串无效
你遇到的error: 25 - Connection string is not valid是关键,先从这里入手:
- 检查appsettings.json里的连接串格式:SQL Server连接串的细节很容易错,举个标准例子:
注意这几个点:"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourChatAppDb;Trusted_Connection=True;MultipleActiveResultSets=true" }- 本地LocalDB的实例名是
(localdb)\\mssqllocaldb,JSON里必须用双反斜杠转义,少一个都会报错 - 如果用的是远程SQL Server,要替换成
Server=你的服务器名\\实例名;,比如Server=DESKTOP-XXXXXX\\SQLEXPRESS; - 如果你用SQL身份验证,要加上
User Id=你的账号;Password=你的密码;,并且确保账号有数据库创建权限
- 本地LocalDB的实例名是
- 验证连接串能否直接连上数据库:打开SSMS(SQL Server Management Studio),用你配置的连接参数手动连接,如果连不上,那就是SQL Server本身的配置问题,和EF无关:
- 检查SQL Server服务是否启动:按Win+R输入
services.msc,找到SQL Server(对应你的实例名,比如MSSQLSERVER),确保状态是“正在运行” - 检查SQL Server的网络配置:打开SQL Server配置管理器,找到SQL Server网络配置→你的实例的协议,确保TCP/IP是启用状态,默认端口1433没被占用
- 检查SQL Server服务是否启动:按Win+R输入
确认EF Core是否正确读取了连接串
有时候配置写对了,但EF没读到也是常事:
- 检查Startup.cs里的DbContext配置:确保你用的是正确的连接串键名,比如:
public void ConfigureServices(IServiceCollection services) { // 这里的"DefaultConnection"必须和appsettings.json里的键完全一致(大小写敏感) services.AddDbContext<EFCoreDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); // 其他配置... } - 加个调试输出验证:在Startup.cs的ConfigureServices里加一行代码,运行项目时看控制台输出的连接串是不是你配置的:
Console.WriteLine("读取到的连接串:" + Configuration.GetConnectionString("DefaultConnection"));
关于Add-Migration成功但没表的问题
其实Add-Migration只是生成了迁移的代码文件,不会自动创建数据库和表,必须成功执行Update-Database才能把迁移应用到数据库。你现在Update-Database报错,自然不会有表生成。另外还要注意:
- 如果你的项目里有多个DbContext,执行迁移命令时要指定上下文,否则可能跑错了:
Add-Migration InitialCreate -Context EFCoreDbContext Update-Database -Context EFCoreDbContext
最后再试一次的步骤
- 确保SQL Server服务启动,SSMS能正常连接目标实例
- 检查appsettings.json的连接串格式,转义符、实例名都正确
- 确认Startup.cs里的DbContext配置读取了正确的连接串
- 打开Package Manager Console,执行:
如果还是报错,把控制台输出的连接串复制到SSMS里测试,看是不是哪里不对Update-Database -Context EFCoreDbContext
内容的提问来源于stack exchange,提问作者So_oP
相关产品推荐
相关产品推荐

