2009-06-03 16 views
6

hello Mam aplikację, która używa nhibernate jako orm, muszę przechowywać dane reprezentujące czas, jaki jest najlepszy sposób na zrobienie tego?Czas i Nhibernate

nhibenate dont wiedzieć, aby konwertować pole czasu z db do przedziału czasowego, tylko ciąg.

Odpowiedz

7

NHibernate obsługuje DateTime, Ticks, TimeSpan and Timestamp. Upewnij się, że określasz typ jawnie na twoim elemencie odwzorowania, ponieważ różne typy czasu mają różną semantykę, więc to, co NHibernate zgaduje, może nie być poprawne.

Jeśli nadal występują problemy, zmodyfikuj swój wpis w celu uwzględnienia odpowiednich fragmentów podmiotu, pliku odwzorowań i rzeczywistego problemu, który napotkasz.

Edit:

Na przykład z następujących klas dla TimeSpan:

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

a plik mapowania:

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

wskazać, że starasz się mapować TimeSpan ("nhibenate nie wie, aby konwertować pole czasu z db do przedziału czasowego, tylko ciąg"). Jeśli jest to poprawny typ dopasowania między .NET (typeofTimeSpan) a bazą danych (DbType.Int64), NH powinien zrobić to automatycznie (tzn. Nie powinieneś określać type="TimeSpan"). Więc jeśli to nie działa, podejrzewam, że jest problem ze sposobem konfiguracji. Pomocne może być umieszczenie deklaracji właściwości/pola z pełnym podpisem, linii <property> dla tej właściwości z pliku odwzorowania oraz definicji kolumny z bazy danych.

+0

Czy muszę określić typ w płynnym nhibernate? –

2

Upewnij się również, że używasz nullable dla swoich DateTimes, które mogą być puste w bazie danych.

DateTime? zamiast tylko DateTime.

Jeśli nie, NHibernate spróbuje zainicjować datę do wartości domyślnej, która prawdopodobnie nie jest tym, czego potrzebujesz.