entityframework核心和sql 2016时态表

时间:2017-03-06 14:02:41

标签: c# asp.net-core .net-core entity-framework-core temporal-tables

我们正在使用efcore和sql 2016作为我们的.net核心web api。我正在评估时态表的使用及其对efcore代码的影响。当我使用cmd行生成ef模型时,它会在dbcontext中使用appstart,append和mappings生成模型。当我插入/更新时,他们无法说这些列无法更新。我不得不删除appstart,从模型和dbcontext映射结束以使其工作。我读过ef6x等efcore中没有拦截功能。请为此提出更好的解决方案。

4 个答案:

答案 0 :(得分:5)

我尝试了以下选项,他们正在努力。

  1. 选项1:删除appstart,追加实体和的字段 dbcontext映射和更新/插入开始正常工作。

  2. 选项2:用。装饰句点列 属性如下。

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

答案 1 :(得分:2)

目前没有更好的解决方案,该功能在backlog上。

答案 2 :(得分:0)

隐藏“期间开始”列(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 

答案 3 :(得分:0)

我认为有一个更好的解决方案,如下所示: 如下创建部分上下文文件(以防止在重新生成模型后重新进行更改)

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();
        });
    }
}