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

EF Core 3.1 逆向脚手架未排除时态表HIDDEN列的问题咨询

行为变更的实际背景
  • EF Core 2.1对SQL Server时态表的支持属于早期实验性适配,当时的逆向脚手架逻辑是临时硬编码实现的:只要识别到时态表关联的周期列,不管其属性如何都会直接跳过映射,恰好匹配了你当时对HIDDEN列被忽略的预期。
  • 从EF Core 3.0开始,团队重构了SQL Server提供程序对时态表的原生正式支持,相关调整没有被纳入升级文档的破坏性变更列表:新的脚手架逻辑不再因为列带HIDDEN标记就做排除,而是会主动把PERIOD FOR SYSTEM_TIME定义的两个周期列(即ValidFromUtc、ValidTillUtc)纳入实体映射范围。
    • 本质上SQL Server的列HIDDEN属性,仅用于控制SELECT *查询时的列返回行为,本身不是定义“ORM映射时需要排除”的数据库级标记。EF Core 3.0之后的设计选择是:既然这两个列是时态表系统版本周期的核心组成部分,就默认将其纳入模型配置,不再跟随HIDDEN标记做自动排除。
    • 你没有在升级文档里找到对应说明的原因是,团队把这个变更归类为正式支持时态表的配套调整,没有将2.1版本的临时跳过逻辑认定为“预期正确行为”,因此没有将其标记为破坏性变更。
现有适配方案
  • 无需每次脚手架操作完成后手动删除生成的多余配置,可以通过自定义逆向工程的T4模板,在生成阶段就过滤掉这两个时态周期列的映射代码,实现和EF Core 2.1版本一致的生成效果。
  • 若不想自定义模板,也可以在生成的模型配置中手动移除这两个列的属性配置;只要EF Core不对这两个列做映射,SQL Server侧的系统版本机制会自动完成列值的赋值与维护,完全不影响时态表的正常读写功能。
  • 补充说明:该设计逻辑从3.1版本延续到了后续所有EF Core正式版本,官方没有重新加入“自动跳过带HIDDEN属性的时态周期列”的脚手架逻辑,默认行为就是将周期列纳入模型映射。

内容的提问来源于stack exchange,提问作者Christopher Townsend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 12:15:03