簡體   English   中英

Entity Framework Core 和 SQL Server 2016 時態表

[英]Entity Framework Core and SQL Server 2016 temporal tables

我們將 EF Core 和 SQL Server 2016 用於我們的 .NET Core Web API。 我正在評估時態表的使用及其對 EF Core 代碼的影響。 當我使用 cmdline 生成 EF 模型時,它會生成帶有 appstart、append 和dbcontext映射的dbcontext 當我插入/更新時,他們說這些列無法更新。 我不得不從模型和dbcontext映射中刪除 appstart、end 以使其工作。 我讀到像 EF 6.x 這樣的 EF Core 中還沒有攔截功能。

請就此提出任何更好的解決方案。

我嘗試了以下選項,它們正在工作。

  1. 選項 1:刪除 appstart,從實體和 dbcontext 映射和更新/插入中附加字段開始正常工作。

  2. 選項 2:使用如下屬性裝飾周期列。


[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime StartTime { get; set; }

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime EndTime { get; set; } 

目前沒有更好的解決方案,該功能在backlog 中

隱藏期間開始列(StartTime)和期間結束列(EndTime)應該可以解決此問題。 我們可以通過

ALTER TABLE [dbo].[Table1] ALTER COLUMN [StartTime] ADD HIDDEN;
ALTER TABLE [dbo].[Table1] ALTER COLUMN [EndTime] ADD HIDDEN;

我們可以在 sys.columns 表中看到針對這些列的隱藏設置

SELECT * FROM sys.columns WHERE is_hidden = 1 

我認為有一個更好的解決方案如下:創建部分上下文文件(以防止在重新生成模型后重新進行更改)如下

public partial class DatabaseDBContext : DbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Table1>(entity =>
        {
            entity.Property(e => e.StartTime)
                .ValueGeneratedOnAddOrUpdate();
            entity.Property(e => e.EndTime)
                .ValueGeneratedOnAddOrUpdate();
        });
    }
}

.NET 6 和 Entity Framework Core 6.0 支持開箱即用的 SQL Server 時態表。

有關示例,請參閱此答案:

https://stackoverflow.com/a/70017768/3850405

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM