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

.NET 9 Web API项目使用用户密钥生成多表Scaffold失败求助

.NET 9 Web API项目使用用户密钥生成多表Scaffold失败求助

兄弟,我刚上手.NET 9 Web API的时候,也在Scaffold结合用户密钥这块栽过跟头!结合你的描述,我帮你捋几个大概率出问题的点,你挨个排查下:

  • 身份验证方式冲突(最可能的坑!)
    你当前的用户密钥里,连接字符串写了Trusted_Connection=True(这是Windows身份验证,用当前系统账号连数据库),但又配置了DbUser和DbPassword(SQL Server身份验证的账号密码),这俩模式是互斥的,EF Core根本不知道该用哪种方式连库,肯定会失败!
    解决办法二选一:

    • 用Windows身份验证:删掉DbUser和DbPassword配置,保留Trusted_Connection=True就行;
    • 用SQL身份验证:把连接字符串里的Trusted_Connection=True删掉,改成User Id=sa; Password=xxxxxx;(或者用配置键占位,后续在命令里对应好)。
  • 确认用户密钥是否真的和项目关联上了
    有时候密钥文件没和项目绑定,等于白配置。你可以在Program.cs里加一行测试代码,启动项目看看能不能读到配置:

    var connString = builder.Configuration.GetSection("simcar")["ConnectionString"];
    Console.WriteLine($"当前读取到的连接字符串:{connString}");
    

    如果启动后控制台打不出正确值,说明密钥没加载成功,你得重新在项目根目录运行dotnet user-secrets init,再重新添加密钥。

  • Scaffold命令的写法要对应配置逻辑
    用用户密钥做Scaffold时,命令里不能硬写连接字符串,得让EF Core从配置里读取,正确的命令格式(以SQL身份验证、指定多表为例)是这样:

    dotnet ef dbcontext scaffold Name=simcar:ConnectionString Microsoft.EntityFrameworkCore.SqlServer -o Models -t TableName1 -t TableName2 -f
    

    这里的Name=simcar:ConnectionString是告诉EF Core去配置里找对应键的值,-t后面跟你要生成的表名(多表就加多个-t),-o指定实体类输出目录,-f是强制覆盖已有文件。

  • 检查EF Core工具版本是否匹配
    .NET 9要对应EF Core 9.x版本,你得确保项目里的Microsoft.EntityFrameworkCore.SqlServer和Microsoft.EntityFrameworkCore.Tools都是9.x版本,版本不兼容也会导致Scaffold失败,去NuGet包管理器里确认下版本号就行。

最后提个小细节:运行Scaffold命令时,一定要在Web API项目的根目录(有.csproj文件的文件夹)下,不然命令找不到项目配置!

备注:内容来源于stack exchange,提问作者Joanny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:18:12