Inserting record in SQL table with timestamp datatype
Asked Answered
T

1

8

I have a SQL Table with TimeStamp Column. The corresponding EF entity is below

 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; }        
}

The VersionStamp property has datatype timestamp is sql

In C# i create a new entity and call savechanges()

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

But i get error

"Cannot insert an explicit value into a timestamp column. Use INSERT with a column list to exclude the timestamp column, or insert a DEFAULT into the timestamp column."

I am not setting timestamp anywhere in the code. I was expecting SQL will automatically update the column value

Treasonable answered 22/8, 2017 at 19:49 Comment(0)
A
14

For EF Core 2.0 (and propably EF Core 1.0 as well) you have to specify timestamp/version property inside DbContext/OnModelCreating mehod.

Below you can find sample specification for the "Request" type.

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
});
Allowed answered 6/11, 2017 at 14:48 Comment(2)
I'm confused as how this addresses the DateTime issue he's referring to.Bathsheeb
Because it's not DateTime issue. It's EF Core issue.Allowed

© 2022 - 2024 — McMap. All rights reserved.