在ASP.NET Core中使用Scaffold-DbContext生成模型时遇脚本终止错误求助
解决Scaffold-DbContext的Script Halted Error问题
我之前也碰到过这个让人头疼的问题,咱们一步步排查解决:
1. 先调整连接字符串的加密设置
你的SQL Server 2008版本可能不支持现代加密协议,原连接字符串里的Encrypt=True;TrustServerCertificate=False很可能是触发错误的原因。修改成以下配置试试:
Scaffold-DbContext "Server=SHAREDDBSQL\MSSQLSERVER2K8;Initial Catalog=AspnetCore-AngularTest;Persist Security Info=False;User ID=userappro;Password=userappro;MultipleActiveResultSets=True;Encrypt=False;TrustServerCertificate=True;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
这里做了几个关键调整:
- 关闭强制加密:
Encrypt=False - 允许信任服务器证书:
TrustServerCertificate=True - 开启
MultipleActiveResultSets=True,脚手架生成过程中经常需要这个特性来读取数据库元数据
2. 确认EF Core工具与项目包版本匹配
如果你的项目中使用的Microsoft.EntityFrameworkCore.SqlServer是某个特定版本(比如6.x、7.x),必须保证全局安装的dotnet-ef工具版本和它完全一致。
比如项目用的是EF Core 6.0,打开命令行运行:
dotnet tool uninstall --global dotnet-ef dotnet tool install --global dotnet-ef --version 6.0.25
之后可以尝试用dotnet ef命令代替Package Manager Console的命令(有时候PMC的环境会有冲突):
cd 你的项目根目录 dotnet ef dbcontext scaffold "你的连接字符串" Microsoft.EntityFrameworkCore.SqlServer -o Models
3. 检查数据库账号的权限
确保userappro账号拥有对目标数据库的元数据读取权限。你可以在SSMS中用这个账号登录,执行以下查询测试:
SELECT * FROM sys.tables; SELECT * FROM sys.columns;
如果查询失败,说明账号缺少权限,需要给它添加db_datareader角色,或者直接授予对系统视图的读取权限。
4. 排查特殊表/视图的问题
如果前面的步骤都没解决,可能是数据库中存在特殊结构的表(比如带特殊字符的名称、循环外键、无主键的表)。可以尝试只生成单个表来定位问题:
Scaffold-DbContext "你的连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t 你的表名
如果单个表生成成功,就逐个排查其他表,找到触发错误的那个表后,要么调整表结构,要么用-x参数排除它。
5. 确认PMC的默认项目选择正确
在Package Manager Console顶部的“默认项目”下拉框中,一定要选中你要生成模型的项目(比如Web项目或者专门的实体类库项目),选错项目也会导致脚手架执行失败。
内容的提问来源于stack exchange,提问作者SoyMario
相关产品推荐
相关产品推荐

