我有一个带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会自动更新列值
答案 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
});