LP13
LP13

Reputation: 34109

Inserting record in SQL table with timestamp datatype

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

Upvotes: 8

Views: 3302

Answers (1)

Tomino
Tomino

Reputation: 6249

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

Upvotes: 14

Related Questions