使用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
相关产品推荐
相关产品推荐

