实体框架6不适用于Temporal表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实体框架6不适用于Temporal表相关的知识,希望对你有一定的参考价值。

我已经改变了一个现有的表来使它成为时间表,然后我从数据库中更新了模型。我遇到了这些错误,我在表中添加了两个新列:

错误3004:从第1388行开始映射片段时出现问题:没有为设置TbCities中的属性TbCities.SysStartTime,TbCities.SysEndTime指定映射。具有密钥(PK)的实体在以下情况下不会往返:实体类型为[DiERPModel.TbCities] 1389 15 DiERP

这是我对改变表的查询:

  --Step 1. Adding nullable the columns
  ALTER TABLE Common.TbCities ADD SysStartTime datetime2 NULL  
  GO
  ALTER TABLE Common.TbCities ADD SysEndTime datetime2 NULL  
  GO
  --Step 2 Adding the default constraints
  ALTER TABLE Common.TbCities ADD CONSTRAINT DF_Cities_SysStartTime DEFAULT GETDATE() FOR SysStartTime;
  GO
  ALTER TABLE Common.TbCities ADD CONSTRAINT DF_Cities_SysEndTime DEFAULT CAST('9999-12-31 23:59:59.9999999' AS DATETIME2) FOR SysEndTime;
  --Step 3 Updating the column
  UPDATE Common.TbCities 
    SET SysStartTime = '19000101 00:00:00.0000000'
        ,SysEndTime = '99991231 23:59:59.9999999'
  GO
  --Step 4 Setting NOT NULL to the columns
  ALTER TABLE Common.TbCities ALTER COLUMN SysStartTime datetime2 NOT NULL  
  GO
  ALTER TABLE Common.TbCities ALTER COLUMN SysEndTime datetime2 NOT NULL  
  GO
  --Step 5 Adding PERIOD FOR SYSTEM_TIME option
  ALTER TABLE Common.TbCities ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)
  GO
  --Step 6 Setting SYSTEM_VERSIONING property
  ALTER TABLE Common.TbCities
      SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Common.TbCities_History))
  GO 
答案

我建议你添加:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

SysStartTime的实体模型类中使用SysEndTimeTbCities,以便实体框架知道它们的值将由SQL服务器生成,而不是将它们设置为自己的默认值。

以上是关于实体框架6不适用于Temporal表的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 6 不适用于时态表

Remove() 不适用于实体框架中的多对多关系

实体框架适用于本地服务器但不适用于远程

主题不适用于片段

Facebook状态回调不适用于片段

用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7