2009-06-03 11 views
6

hallo ich habe eine Anwendung, die nhibernate als orm verwendet, muss ich Daten, die Zeit darstellt, was ist der beste Weg, es zu tun?Zeit und Nhibernate

Nhibenate weiß nicht, Zeitfeld von Db in eine Zeitspanne zu konvertieren, nur Zeichenfolge.

Antwort

7

NHibernate unterstützt DateTime, Ticks, TimeSpan and Timestamp. Stellen Sie sicher, dass Sie den Typ explizit für Ihr Mapping-Element angeben, da die verschiedenen Zeittypen unterschiedliche Semantiken haben. Daher ist es möglicherweise nicht korrekt, was NHibernate vermutet.

Wenn Sie Probleme haben und immer noch haben, ändern Sie Ihren Beitrag so, dass er die relevanten Teile Ihrer Entität, Mapping-Datei und das eigentliche Problem enthält.

Edit:

Zum Beispiel mit der folgenden Klasse für eine TimeSpan:

public class MyClass 
{ 
    // Other properties 
    // ... 
    // ... 
    public virtual TimeSpan MyTimeProperty { get; set; } 
} 

und die Mapping-Datei:

<!-- other properties --> 
<property name="MyTimeProperty" type="TimeSpan" /> <!-- Note: NH expects the DB type to be DbType.Int64 --> 

Sie zeigen, dass Sie versuchen, map eine TimeSpan ("nhifenate weiß nicht, Zeitfeld von db in eine Zeitspanne zu konvertieren, nur String"). Wenn dies der richtige Typ ist, der zwischen .NET (typeofTimeSpan) und der Datenbank (DbType.Int64) passt, sollte NH dies automatisch tun (d. H. Sie sollten type="TimeSpan" nicht angeben müssen). Wenn es nicht funktioniert, vermute ich, dass es ein Problem mit der Einrichtung der Dinge gibt. Es kann hilfreich sein, wenn Sie die Eigenschafts-/Felddeklaration mit voller Signatur, die <property> Zeile für diese Eigenschaft aus Ihrer Zuordnungsdatei und die Spaltendefinition aus der Datenbank veröffentlichen.

+0

Muss ich den Typ in flüssigem Nhibernat angeben? –

2

Stellen Sie außerdem sicher, dass Sie NULL-Werte für Ihre DateTimes verwenden, die in der Datenbank null sein können.

DateTime? anstatt nur DateTime.

Wenn nicht, wird NHibernate versuchen, Ihr Datum auf einen Standardwert zu initialisieren, der wahrscheinlich nicht Ihren Vorstellungen entspricht.