在 EF Core 6.0 中测试表 IsTemporal

Posted

技术标签:

【中文标题】在 EF Core 6.0 中测试表 IsTemporal【英文标题】:Test if table IsTemporal in EF Core 6.0 【发布时间】:2021-12-28 17:21:23 【问题描述】:

EF Core 6.0 现在支持 IsTemporal(),它允许您使用 MS-SQL 历史表。在提交数据之前,我使用 DbContext.OnBeforeSaving() 来验证某些字段。如果表是临时表,那么我想保存更新此行的人的 UserId。

如何测试表是否是临时的? (即通过下面的伪代码)

foreach (var entry in ChangeTracker.Entries<MyBaseEntityType>())

   // if (entry is Temporal)
   //    set entry.Entity.UserID from IHttpContextAccessor.HttpContext.User

【问题讨论】:

【参考方案1】:

EF Core 6.0 现在支持 IsTemporal(),它允许您使用 MS-SQL 历史记录表

我猜你想到了IsTemporal() fluent configuration API like

modelBuilder.Entity<MyTable>().ToTable(tableBuilder =>
    tableBuilder.IsTemporal());

对于以这种方式配置的实体,有相应的IsTemporal() 元数据扩展方法,例如(需要参考 Microsoft.EntityFrameworkCore.SqlServer 程序集)

foreach (var entry in ChangeTracker.Entries<MyBaseEntityType>())

    if (entry.Metadata.IsTemporal())
    
        // Do something
    

【讨论】:

以上是关于在 EF Core 6.0 中测试表 IsTemporal的主要内容,如果未能解决你的问题,请参考以下文章