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

