You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Entity Framework CLI更新数据库架构报18456登录失败

错误原因

你遇到的18456登录失败问题是两个配置错误共同导致的:

  1. 连接字符串使用了Trusted_Connection=True即Windows集成身份验证,该验证模式仅支持Windows环境下的SQL Server实例,你当前在macOS上连接Docker运行的SQL Server,系统无法完成Windows域身份校验,EF工具会自动尝试用本机Guest账号登录,直接被SQL Server拒绝。
  2. 项目文件中同时引用了过时的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:06:26