在 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的主要内容,如果未能解决你的问题,请参考以下文章

GroupBy 与 EF Core 6.0 和 SQL Server

Asp.net Core 6.0 使用EF Model First 连接mysql

Asp.net Core 6.0 使用EF Model First 连接mysql

如何在 EF Core 中仅包含相关表的最新记录

如何从另一个表中获取数据并插入到 EF Core 中所需的表中

插入到 EF Core ASP.NET Core Razor Pages .NET6 中自动生成的 Bridge 表