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

执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:09:20