gpt4 book ai didi

sql-server-2016 - 使用 Entity Framework Core 2.1 插入时态表时出错

转载 作者:行者123 更新时间:2023-12-03 23:15:07 24 4
gpt4 key购买 nike

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

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看起来像这样:
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 控制台生成它,并且每次重新生成它时我都无法手动更新它。

最佳答案

制作 Period start column(SysStartTime) 和 Period end column(SysEndTime) 应该可以解决这个问题。我们可以通过

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

我们可以在 sys.columns 表中看到针对这些列的隐藏设置
SELECT * FROM sys.columns WHERE is_hidden = 1 

关于sql-server-2016 - 使用 Entity Framework Core 2.1 插入时态表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52654609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com