Ich nehme eine API, die die folgende Klasse für Zeit hat.Entity Framework Server Seite berechneter Wert
public class CRTime
{
public DateTime? datetime { get; set; }
public string timezone { get; set; }
}
Ich möchte das in ein einzelnes DateTime-Feld übersetzen.
Hier ist ein Beispiel für das vollständige Objekt, das mir zurückgegeben wird und wie ich versuche, das DateTime-Feld zu berechnen, das dann in der Datenbank gespeichert wird.
public class ReturnObject
{
[NotMapped]
// This comes from the api, but is not synced to database
public CRTime CRCreated { get; set; }
// this is stored in our db, should be calculated from CRCreated
public DateTime? CreatedDB { get
{
var val = (CRCreated != null) ? CRCreated.datetime : null;
return val;
}
private set { }
}
// other fields go here
}
Dies funktioniert perfekt auf Rekord schaffen, aber wenn ich die Platte mit dem Entity.Migration Rahmen und AddOrUpdate versuchen und aktualisieren, überschreibt das Update den Wert und setzt sie immer auf NULL.
Was ist die beste Lösung zum Erstellen einer serverseitigen berechneten Spalte, die dann mit der Datenbank synchronisiert wird.
Side Hinweis: Ich verwende NewtonSoft Json, um das Objekt in mein Entity-Framework-Objekt zu deserialisieren und dann an Entity Framework AddOrUpdate zu übergeben.
Durchdenken Dinge, vielleicht gibt es ein Problem, da die CRC-Eigenschaft nicht in der Datenbank gespeichert wird, so auf Aktualisierung, Entity Framework hat Schwierigkeiten, den Vergleich und die Berechnung darauf, da es seinen Wert von der db, wo es ist null anstatt von dem Objekt von der API zu kommen? – TWilly
Ich habe auch versucht, [DatabaseGenerated (DatabaseGeneratedOption.Computed)] -Attribut, aber dies ist für Berechnungen auf der db-Seite, die keine Informationen in CRCreated Objekt hat. – TWilly