执行Scaffold-DbContext命令时遇列名无效错误求助
解决EF Core Scaffold-DbContext报错“Invalid column name 'has_filter'/'filter_definition'”
问题场景
执行EF Core的Scaffold-DbContext命令时:
Scaffold-DbContext 'Data Source=""; Database=""; User Id="";Password="";TrustServerCertificate=Yes' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
触发以下错误:
ClientConnectionId:f433cc07-6534-4bb4-ad0e-eab15d75ed67 Error Number:207,State:1,Class:16 Invalid column name 'has_filter'. Invalid column name 'filter_definition'.
根本原因
has_filter和filter_definition是SQL Server 2016及更高版本中sys.indexes系统视图的字段。如果你的EF Core版本(比如6.0及以上)对SQL Server的版本要求高于你实际使用的数据库版本(比如SQL Server 2012/2014),EF Core在生成模型时会尝试读取这些低版本SQL Server不存在的字段,从而抛出错误。
可行解决方案
1. 匹配EF Core与SQL Server版本
根据你的SQL Server版本选择对应兼容的EF Core版本:
- SQL Server 2012/2014:使用EF Core 5.0或更低版本
- SQL Server 2016+:可以正常使用EF Core 6.0及以上版本
如果需要降级EF Core包,在Package Manager Console中执行:
Uninstall-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 5.0.17
(版本号可按需调整,优先选择对应大版本的最新稳定版)
2. 调整SQL Server数据库兼容级别(仅适用于SQL Server 2016+)
如果你的SQL Server是2016或更高版本,但数据库兼容级别设置低于130(SQL Server 2016的默认兼容级别),执行以下SQL命令修改:
ALTER DATABASE [你的数据库名称] SET COMPATIBILITY_LEVEL = 130;
不同SQL Server版本对应的兼容级别:
- SQL Server 2017:140
- SQL Server 2019:150
- SQL Server 2022:160
3. 临时排除系统视图(不推荐)
如果无法调整版本或兼容级别,可尝试在Scaffold命令中排除sys.indexes视图,但可能导致生成的模型不完整:
Scaffold-DbContext '你的连接字符串' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ExcludeTables sys.indexes
内容的提问来源于stack exchange,提问作者Kunal
相关产品推荐
相关产品推荐

