使用 Entity Framework Core 2.1 插入时态表时出错 [英] Error when inserting into temporal table using Entity Framework Core 2.1

查看:22
本文介绍了使用 Entity Framework Core 2.1 插入时态表时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用 Entity Framework Core 2.1 插入时态表时出现以下错误.

I'm getting the below error when trying to insert into a temporal table using Entity Framework Core 2.1.

无法在表 'db_test.dbo.Department' 的 GENERATED ALWAYS 列中插入显式值.将 INSERT 与列列表一起使用以排除 GENERATED ALWAYS 列,或将 DEFAULT 插入到 GENERATED ALWAYS 列中.

Cannot insert an explicit value into a GENERATED ALWAYS column in table 'db_test.dbo.Department'. Use INSERT with a column list to exclude the GENERATED ALWAYS column, or insert a DEFAULT into GENERATED ALWAYS column.

下面是我的表架构

CREATE TABLE Department   
(    
     DeptID int NOT NULL PRIMARY KEY CLUSTERED, 
     DeptName varchar(50) NOT NULL,
     ManagerID INT  NULL,
     ParentDeptID int NULL,
     SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
     SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL, 
     PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)     
)   
WITH    
   (   
      SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory)   
   )   
;

我的 DbContext 看起来像这样:

And my DbContext looks like this:

modelBuilder.Entity<Department>(entity =>
            {
                entity.HasKey(e => e.DeptId);

                entity.Property(e => e.DeptId)
                    .HasColumnName("DeptID")
                    .ValueGeneratedNever();

                entity.Property(e => e.DeptName)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.Property(e => e.ManagerId).HasColumnName("ManagerID");

                entity.Property(e => e.ParentDeptId).HasColumnName("ParentDeptID");
            });

请看一看,让我知道我们如何解决这个问题.我不喜欢修改 db 上下文类,因为我使用 DBScaffold 通过 nuget 控制台生成它,并且每次重新生成它时我都无法手动更新它.

Please take a look and let me know how we can fix this. I'm not a fan of modifying the db context class as I generate it via nuget console using DBScaffold and I cannot update it manually each time when we re-generate it.

推荐答案

制作期间开始列(SysStartTime) 和期间结束列(SysEndTime) 应该可以解决此问题.我们可以通过

Making the Period start column(SysStartTime) and Period end column(SysEndTime) should fix this issue. We can do this by

ALTER TABLE [dbo].[Department] ALTER COLUMN [SysStartTime] ADD HIDDEN;
ALTER TABLE [dbo].[Department] ALTER COLUMN [SysEndTime] ADD HIDDEN;

我们可以在 sys.columns 表中看到这些列的隐藏设置

We can see the settings for hidden against these columns in the sys.columns table

SELECT * FROM sys.columns WHERE is_hidden = 1 

这篇关于使用 Entity Framework Core 2.1 插入时态表时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆