使用timestamp数据类型在SQL表中插入记录

时间:2017-08-22 19:49:14

标签: .net-core coreclr entity-framework-core

我有一个带TimeStamp列的SQL表。相应的EF实体位于

之下
 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   使用列列表排除时间戳列,或插入一个   DEFAULT进入时间戳列。“

我没有在代码中的任何位置设置timestamp。我原以为SQL会自动更新列值

1 个答案:

答案 0 :(得分:8)

对于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
});