2017-08-22 47 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 
});