使用Entity Framework CLI更新数据库架构报18456登录失败
错误原因
你遇到的18456登录失败问题是两个配置错误共同导致的:
- 连接字符串使用了
Trusted_Connection=True即Windows集成身份验证,该验证模式仅支持Windows环境下的SQL Server实例,你当前在macOS上连接Docker运行的SQL Server,系统无法完成Windows域身份校验,EF工具会自动尝试用本机Guest账号登录,直接被SQL Server拒绝。 - 项目文件中同时引用了过时的
System.Data.SqlClient和EF Core依赖的新版Microsoft.Data.SqlClient驱动,双驱动并存可能导致连接配置解析异常。
修复方案
按以下步骤调整配置即可解决问题:
- 修改
appsettings.json中的连接字符串,改用SQL Server账号密码认证,补充端口配置和开发环境证书信任配置。注意将你的SA密码替换为你启动SQL Server Docker容器时设置的SA账户密码,如果你自定义了宿主机映射端口,将1433替换为你实际设置的端口:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "DefaultConnection": "Server=localhost,1433;Database=BookClub;User Id=sa;Password=你的SA密码;TrustServerCertificate=True;" } }
补充说明:TrustServerCertificate=True用于跳过本地开发环境的SQL Server TLS证书校验,避免本地调试时出现证书信任错误。
- 编辑
BoockClub.csproj文件,删除过时的SQL客户端包引用,避免驱动冲突:
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
- 检查项目
Program.cs文件,确认已正确注入DbContext并读取连接字符串,缺失的话补充以下代码:
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
- 清理并重新生成项目后,重新执行数据库更新命令:
dotnet build dotnet ef database update
排错提示
如果调整后仍连接失败,依次检查以下项:
- 运行SQL Server的Docker容器是否处于正常启动状态
- 本地1433端口是否被其他程序占用
- 设置的SA密码是否符合SQL Server复杂度要求(长度不低于8位,包含大小写字母、数字、特殊符号三类及以上)
内容的提问来源于stack exchange,提问作者Gurpreet Singh
相关产品推荐
相关产品推荐

