Entity Framework Core 和 SQL Server 2016 时态表
Entity Framework Core and SQL Server 2016 temporal tables
我们正在为我们的 .NET Core Web API 使用 EF Core 和 SQL Server 2016。我正在评估临时表的使用及其对 EF Core 代码的影响。当我使用 cmdline 生成 EF 模型时,它会在 dbcontext
中生成带有 appstart、append 和映射的模型。当我执行 insert/update 时,他们没有说这些列无法更新。我必须从模型和 dbcontext
映射中删除 appstart、end 才能使其工作。我读到在 EF 6.x.
之类的 EF Core 中还没有拦截功能
请告知任何更好的解决方案。
目前没有更好的解决方案,功能在backlog上。
我尝试了以下选项,它们都有效。
选项 1:删除了 appstart,从实体和附加字段
dbcontext 映射和 updates/insert 开始正常工作。
选项 2:用
属性如下。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime StartTime { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime EndTime { get; set; }
隐藏期间开始列 (StartTime) 和期间结束列 (EndTime) 应该可以解决此问题。我们可以通过
ALTER TABLE [dbo].[Table1] ALTER COLUMN [StartTime] ADD HIDDEN;
ALTER TABLE [dbo].[Table1] ALTER COLUMN [EndTime] ADD HIDDEN;
我们可以在 sys.columns table
中看到这些列的隐藏设置
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 开箱即用的服务器临时表。
查看此答案以获取示例:
我们正在为我们的 .NET Core Web API 使用 EF Core 和 SQL Server 2016。我正在评估临时表的使用及其对 EF Core 代码的影响。当我使用 cmdline 生成 EF 模型时,它会在 dbcontext
中生成带有 appstart、append 和映射的模型。当我执行 insert/update 时,他们没有说这些列无法更新。我必须从模型和 dbcontext
映射中删除 appstart、end 才能使其工作。我读到在 EF 6.x.
请告知任何更好的解决方案。
目前没有更好的解决方案,功能在backlog上。
我尝试了以下选项,它们都有效。
选项 1:删除了 appstart,从实体和附加字段 dbcontext 映射和 updates/insert 开始正常工作。
选项 2:用 属性如下。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime StartTime { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime EndTime { get; set; }
隐藏期间开始列 (StartTime) 和期间结束列 (EndTime) 应该可以解决此问题。我们可以通过
ALTER TABLE [dbo].[Table1] ALTER COLUMN [StartTime] ADD HIDDEN;
ALTER TABLE [dbo].[Table1] ALTER COLUMN [EndTime] ADD HIDDEN;
我们可以在 sys.columns table
中看到这些列的隐藏设置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 开箱即用的服务器临时表。
查看此答案以获取示例: