.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;(或者用配置键占位,后续在命令里对应好)。
- 用Windows身份验证:删掉
确认用户密钥是否真的和项目关联上了
有时候密钥文件没和项目绑定,等于白配置。你可以在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

