.NET EF执行update database未尝试连接数据库问题排查
问题排查与修复方案
从你贴的日志里的with options: None可以直接判断:EF Core迁移工具根本没有读取到你在代码里写的AddDbContext配置,和你写的连接字符串密码对错无关——工具初始化DbContext的时候压根没用上你传的连接参数,自然不会连接你指定的localhost SQL Server实例,也不会创建数据库对象。
具体修复步骤
第一步:清理连接字符串里的冲突配置
你当前写的连接字符串同时存在SQL账号密码配置和Trusted_Connection=True配置,后者代表启用Windows集成身份验证,优先级高于SQL账号验证,会直接忽略你填的sa账号密码。如果要使用sa账号登录本地SQL Server,把冲突项去掉,同时补充本地开发所需的证书信任配置,修正后的写法:builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer("Server=localhost;Database=SuperDB;User Id=sa;Password=MYPASSWORD;MultipleActiveResultSets=true;TrustServerCertificate=True"));如果你本来就想用Windows身份验证登录,直接删掉
User Id=sa;Password=MYPASSWORD这两个参数即可。第二步:补全EF Core设计时加载所需的配置
.NET 6+ 采用顶级语句的最小API模板默认不会把Program类暴露给外部工具,EF Core迁移工具运行时读不到你写的服务配置,就会用无参数的方式初始化DbContext,才会出现options: None的日志。你只需要在Program.cs文件的最末尾添加一行代码即可:public partial class Program { }添加后重新生成项目,再执行迁移命令,此时日志里就不会再出现
options: None,会正常显示加载的SQL Server提供器配置。第三步:排查基础配置问题
- 执行EF迁移命令前,确认包管理器控制台的默认项目、命令行的启动项目都设置为你编写
AddDbContext逻辑的Web项目,不要选成单独的实体类库。 - 确认
AddDbContext的配置代码没有写在if (app.Environment.IsDevelopment())这类条件判断分支中,EF设计时工具默认以生产环境模式运行,会跳过分支内的配置。 - 确认你本机localhost对应的SQL Server实例处于运行状态,且实例已经开启SQL Server身份验证模式、sa账号处于启用状态。
- 执行EF迁移命令前,确认包管理器控制台的默认项目、命令行的启动项目都设置为你编写
内容的提问来源于stack exchange,提问作者aveleg
相关产品推荐
相关产品推荐

