【发布时间】:2021-11-12 16:13:13
【问题描述】:
所以,首先我在 SQL Server 中创建了一个临时(系统版本)表。 为简单起见:
CREATE TABLE dbo.person
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
NAME VARCHAR(10) NOT 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.person_history));
GO
然后我使用Scaffold-DbContext 命令创建对象。
所以它创建了 1 个对象:
public partial class person
{
public int ID { get; set; }
public string NAME { get; set; }
public DateTime SysStartTime { get; set; }
public DateTime SysEndTime { get; set; }
}
现在我想在这个表中保存一个新项目,这就是问题所在。
using (var context = new myDBContext())
{
var newItem = new person
{
NAME = "Sergey"
};
context.person.Add(newItem);
context.SaveChanges();
}
这里是 SaveChanges() 行的例外:
SqlException:无法将显式值插入到 GENERATED ALWAYS 表“dbo.person”中的列。将 INSERT 与 列列表以排除 GENERATED ALWAYS 列,或插入 DEFAULT 到 GENERATED ALWAYS 列
所以我的问题是,我错过了什么? 我应该添加任何设置来指定此表是系统版本的吗?
当我使用脚本将数据直接插入表格时,它可以完美运行。
【问题讨论】:
标签: c# sql-server entity-framework-core .net-5 temporal-tables