Betrachten Sie die folgende einfache C# Klasse:Wie kann NHibernate den Datenbankstandardwert beim Speichern einer neuen Entität verwenden?
public class Entity
{
public Entity() { }
public virtual int Id { get; private set; }
public virtual DateTime DateCreated { get; private set; }
}
mit der folgenden einfachen Zuordnung NHibernate Mapped:
<class name="Entity" mutable="false">
<id name="Id">
<generator class="native">
</id>
<property name="DateCreated"/>
</class>
Zum folgende einfachen Datenbankschema:
CREATE TABLE Entity (
Id int IDENTITY(1,1) PRIMARY KEY,
DateCreated datetime NOT NULL DEFAULT getUtcDate()
)
Wenn Sie eine neue Instanz erstellen der Entity
und Speichern in der Datenbank, wie Sie NHibernate anweisen, den Standardwert der Datenbank für die verwenden DateCreated
Spalte, wenn der Wert null
ist? Alternativ, wie kann ich angeben, dass NHibernate das Ergebnis der getUtcDate()
Funktion als Wert für das Feld DateCreated
beim Einfügen verwenden soll?
Während ich leicht
DateCreated = DateTime.Now;
in den Konstruktor Entity hinzufügen könnte, dies des Anwendungsservers lokale Uhr wird automatisch mit, und ich brauche die Datenbank der lokale Uhr zu verwenden, die Konsistenz zu gewährleisten, wenn es mehrere Anwendungsserver jeweils mit ihre möglicherweise nicht synchronisierten lokalen Uhren.
kann nicht nhibernate Frage beantworten, aber in der Regel werden Sie Daten in Ihrer Datenbank als UTC gespeichert werden sollen. Unabhängig von ihrer Quelle ist UTC auf allen Servern gleich (vorausgesetzt, die Uhren sind genau). –
Im Allgemeinen ja, zugestimmt. Deshalb habe ich getUtcDate() anstelle von getDate() in der Frage angegeben. :) – iammichael