2017-07-04 68 views
0

我有一个名为Address的类,它是一个系统版本化表。我试图插入到这个表中使用实体框架上下文添加一个对象的上下文,然后做一个SaveChanges调用。当表格不是系统版本的时候,这可以按预期工作。在我的模型,看起来像这样减去一些未涉及到这个问题的属性:实体框架忽略插入具有临时表的数据的属性

 [DataMember] 
     public System.DateTime SysStartTime 
     { 
      get { return _sysStartTime; } 
      set 
      { 
       if (_sysStartTime != value) 
       { 
        _sysStartTime = value; 
        OnPropertyChanged("SysStartTime"); 
       } 
      } 
     } 
     private System.DateTime _sysStartTime; 

     [DataMember] 
     public System.DateTime SysEndTime 
     { 
      get { return _sysEndTime; } 
      set 
      { 
       if (_sysEndTime != value) 
       { 
        _sysEndTime = value; 
        OnPropertyChanged("SysEndTime"); 
       } 
      } 
     } 
     private System.DateTime _sysEndTime; 

     [DataMember] 
     public int AddressId 
     { 
      get { return _addressId; } 
      set 
      { 
       if (_addressId != value) 
       { 
        if (ChangeTracker.ChangeTrackingEnabled && ChangeTracker.State != ObjectState.Added) 
        { 
         throw new InvalidOperationException("The property 'AddressId' is part of the object's key and cannot be changed. Changes to key properties can only be made when the object is not being tracked or is in the Added state."); 
        } 
        _addressId = value; 
        OnPropertyChanged("AddressId"); 
       } 
      } 
     } 
     private int _addressId; 

这种历史表是按照与始终生成的属性隐蔽性和默认值文档创建。 当我尝试做一个简单的插入我的错误:

Cannot insert value into generated always identity column

我明白什么是错误说法,但我不知道如何解决它。我试图从模型中删除SysStartTime和SysEndTime属性,但这给我验证问题。我也尝试不将模型上的属性设置为DataMember,甚至IgnoreDataMember,但结果始终相同。我的问题是,如何在将对象与地址模型添加到上下文之前从中删除SysStartTime和SysEndTime属性?谢谢。

更新: 我已经使用这个代码来创建我的态表:

ALTER TABLE [dbo].[Address] ADD 
          [SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT DF_Telco_SysStartTime DEFAULT '1900-01-01 00:00:00', 
          [SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT DF_Telco_SysEndTime DEFAULT '9999-12-31 23:59:59', 
          PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]) 

ALTER TABLE [dbo].[Address] 
          SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Address_History])); 
+0

表中是否有标识列?你能提供你分配值的代码吗? – Harsh

+0

用相关的时态表代码更新了这个问题 – xDevil

+0

我从来没有设置SysStartTime和SysEndTime值,他们只是将默认值设置为min DateTime – xDevil

回答

0

我已经通过修改model.edmx文件并添加到SysStartTime和SysEndTime StoreGeneratedPattern="Computed"属性中找到针对此问题的解决方法。