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

EF Core 6.0 如何判断实体对应的表是否为Temporal时态表

EF Core 6+ 检测实体对应表是否为Temporal(时态)表的实现方案

EF Core 6及以上版本已经内置IsTemporal()扩展方法,可直接通过实体元数据判断关联表是否为时态表,具体实现逻辑如下:

前置准备

  • 引入命名空间:using Microsoft.EntityFrameworkCore;
  • 提前在项目依赖注入容器中注册IHttpContextAccessor,并在DbContext构造函数中注入该服务,用于获取当前登录用户ID

完整实现代码

// 假设你已经在DbContext中注入了IHttpContextAccessor,字段名为_httpContextAccessor
foreach (var entry in ChangeTracker.Entries<MyBaseEntityType>())
{
    // 检测当前实体对应的表是否为Temporal时态表
    if (entry.Metadata.IsTemporal())
    {
        // 从上下文获取当前登录用户ID,赋值到实体的UserId字段
        // 若使用ClaimTypes.NameIdentifier需引入命名空间using System.Security.Claims;
        // 也可根据项目自身的身份认证逻辑调整用户ID的获取方式
        entry.Entity.UserID = _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);
    }
}

注意说明

该判断生效的前提是你已经在OnModelCreating方法中通过Fluent API为对应实体开启了时态表配置,示例配置如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<你的实体类>()
        .ToTable(t => t.IsTemporal());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:04