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

LP1*_*P13 4 entity-framework-core .net-core coreclr

我有一个带有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; }        
}
Run Code Online (Sandbox Code Playgroud)

VersionStamp属性的数据类型timestamp为sql

在C#中我创建一个新实体并调用savechanges()

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

但我得到错误

"无法在时间戳列中插入显式值.将INSERT与列列表一起使用以排除时间戳列,或将DEFAULT插入时间戳列."

我没有timestamp在代码中设置任何地方.我原以为SQL会自动更新列值

Tom*_*ino 9

对于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
});
Run Code Online (Sandbox Code Playgroud)