2017-08-22 50 views
2

我有一个带有TimeStamp列的SQL表。相应的EF实体低于插入带有时间戳记的SQL表中的记录数据类型

public partial class Request : IEntityBase 
{ 
    public Request() 
    {    
    } 

    public int RequestID { get; set; } 
    public Nullable<int> BatchID { get; set; } 
    public string ClientID { get; set; } 
    public Nullable<System.DateTime> CreatedDateTime { get; set; } 
    public Nullable<System.DateTime> ModifiedDateTime { get; set; } 
    public byte[] VersionStamp { get; set; }   
} 

VersionStamp酒店有数据类型timestamp是SQL

在C#中我创建了一个新的实体,并调用的SaveChanges()

 var request = new Request() 
     { 
      ClientID = "XYZ", 
      CreatedDateTime = DateTime.Now, 
      ModifiedDateTime = DateTime.Now, 
     };    
     await _DBContext.SaveChangesAsync().ConfigureAwait(false); 

,但我得到的错误

”无法在时间戳列中插入显式值。使用INSERT 带有列表列表以排除时间戳列,或将缺省值插入到时间戳列。“

我不是在代码中的任何地方设置timestamp。我期待SQL会自动更新列值

回答

4

对于EF Core 2.0(并且也适用于EF Core 1.0),您必须在DbContext/OnModelCreating mehod中指定timestamp/version属性。

以下您可以找到“请求”类型的样本规范。

modelBuilder.Entity<Request>(entity => 
{ 
    entity.ToTable("Requests");   // Depends on your table name 
    entity.HasKey(e => e.RequestID)  // If you have a primary key 
      .HasName("PK_Requests"); 

    entity.Property(e => e.VersionStamp) 
      .IsConcurrencyToken()   // If you want to handle concurrency 
      .ValueGeneratedOnAddOrUpdate(); // This is important 
});