2017-08-22 3 views
2

Ich habe eine SQL-Tabelle mit TimeStamp Spalte. Die entsprechende EF Einheit unterDatensatz in SQL-Tabelle mit Timestamp-Datentyp einfügen

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

Die VersionStamp Eigenschaft hat Datentyp timestamp SQL ist

In C# i eine neue Entität erstellen und rufen Sie Savechanges()

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

aber ich bekomme Fehler

"Ein expliziter Wert kann nicht in eine Timestamp-Spalte eingefügt werden. Verwenden Sie INSERT mit einer Spaltenliste, um die Timestamp-Spalte auszuschließen, oder fügen Sie eine DEFAULT in die Timestamp-Spalte ein. "

Ich setze keine timestamp irgendwo im Code. Ich erwartete, dass SQL den Spaltenwert automatisch aktualisiert

Antwort

4

Für EF Core 2.0 (und wahrscheinlich auch EF Core 1.0) müssen Sie Zeitstempel/Version-Eigenschaft in DbContext/OnModelCreating mehod angeben.

Im Folgenden finden Sie die Beispielspezifikation für den Typ "Anfrage".

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