2009-06-03 33 views
6

你好,我有一個應用程序,使用nhibernate作爲orm,我需要存儲的數據,代表時間, 什麼是最好的辦法呢?時間和Nhibernate

nhibenate不知道將時間字段從數據庫轉換爲時間跨度,只有字符串。

回答

7

NHibernate支持DateTime, Ticks, TimeSpan and Timestamp。確保你在映射元素上明確指定類型,因爲不同的時間類型有不同的語義,所以NHibernate猜測的可能是不正確的。

如果您仍然有問題,請修改您的帖子以包含實體的相關部分,映射文件以及您遇到的實際問題。

編輯:

例如,下面的類爲TimeSpan

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

和映射文件:

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

表明您正在嘗試映射時間跨度(「nhibenate不知道將時間字段從數據庫轉換爲時間跨度,只有字符串」)。如果這是.NET(typeofTimeSpan)與數據庫(DbType.Int64)之間的正確類型匹配,則NH應自動執行此操作(即,您不需要指定type="TimeSpan")。所以如果它不能正常工作,我懷疑你的設置方式有問題。如果您使用完整簽名發佈屬性/字段聲明,映射文件中該屬性的<property>行以及數據庫中的列定義,則可能會有所幫助。

+0

我需要指定流利的nhibernate類型嗎? – 2009-06-06 14:28:44

2

此外,請確保您使用數據庫中可以爲null的DateTimes的可用空值。

DateTime?而不僅僅是DateTime。

如果不是,NHibernate會嘗試初始化您的日期到一個默認值,這可能不是你想要的。