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

使用EntityFrameworkCore.TemporalTables.Extensions调用Between方法报错如何解决

EF Core 搭配时态表查询报 Invalid object name 错误解决方案

你遇到的报错是第三方时态表扩展没有复用EF Core已配置的表映射规则导致的。普通LINQ查询会读取你提前配置的表名、Schema等映射信息,而该扩展的时态查询方法默认直接使用实体类名作为表名查询,若你的表不属于默认dbo Schema、或实际表名与实体类名不一致,就会触发对象名无效报错。

以下是可直接落地的解决方案:

  • 方案1:补全时态表映射配置
    在你DbContext的OnModelCreating方法中,给对应实体显式配置时态表的完整映射信息,示例代码如下:

    modelBuilder.Entity<MyModel>(b =>
    {
        // 显式指定实际表名和所属Schema,和你普通查询用的配置保持一致
        b.ToTable("实际表名", "你的Schema名");
        // 配置时态表相关参数,和SQL Server中时态表的实际字段、历史表配置对应
        b.IsTemporal(t =>
        {
            t.HasPeriodStart("SysStartTime");
            t.HasPeriodEnd("SysEndTime");
            t.UseHistoryTable("对应的历史表名", "你的Schema名");
        });
    });
    

    配置完成后扩展生成SQL时会自动读取上述映射信息,生成带正确Schema和表名的查询语句。

  • 方案2:使用EF Core原生时态表支持(推荐)
    如果你使用的是EF Core 6及以上版本,框架已经原生支持SQL Server时态表,无需引入第三方扩展。按上述方法完成IsTemporal配置后,直接使用原生的时态查询方法即可,原生实现会自动复用所有已配置的映射规则,不会出现表名找不到的问题,示例查询代码:

    var allItems = context.MyModel
        .TemporalBetween(DateTime.MinValue, DateTime.UtcNow)
        .ToList();
    
  • 额外检查项
    如果配置完成后仍报错,可通过EF Core的日志功能输出生成的SQL语句,确认语句中的表名、Schema是否和实际数据库中的配置一致,排除拼写错误问题。


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

相关产品推荐
方舟 Agent Plan

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

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