[英]Net Core: Entity Framework and SQL Server Temporal Tables, Automatic Scaffolding
[英]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:刪除 appstart,從實體和 dbcontext 映射和更新/插入中附加字段開始正常工作。
選項 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 時態表。
有關示例,請參閱此答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.