2010-12-09 44 views
0

使用.Net和NHibernate,我從MySql-數據庫表中繪製數據。這包含一列數據類型爲MySQL-Timestamp的默認零值(0000-00-00 00:00:00)。如何接收零MySQL時間戳值

我將該列映射到我的類的DateTime成員。當創建一個標準時,NHibernate會抱怨錯誤的格式。我想將零值轉換爲有效值。這可能嗎?

更新: 我試圖在我想要映射的類中實現IUserType接口。但是,這似乎還沒有幫助很多。它看起來像這樣:

public virtual object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner) 
    { 
     if (rs.IsDBNull(rs.GetOrdinal(names[6])) || rs.GetDateTime(6) < DateTime.MinValue) return DateTime.MinValue; 
     else 
      return rs.GetDateTime(6); 
    } 

我不知道這是否正確。 (導致問題的日期時間值是類的 6財產。)

我的程序違反這段代碼:

ISession session = GetCurrentSession(); 
return session.CreateCriteria<ClassToMap>().List<ClassToMap>(); 

回答

0

如果您有什麼你想它映射到上的MySQL最後,你必須查詢的控制,在你SELECT聲明,你可以這樣做

SELECT IF(field!='0000-00-00 00:00:00',field,'2010-01-01 00:00:00') 
FROM table 

灌裝在fieldtable等,其中2010-01-01 00:00:00是我映射零值。

+0

不,我使用NHibernate,它爲我做的SQL。 – AGuyCalledGerald 2010-12-13 13:04:11

0

您可以按照您喜歡的方式實現IUserType並管理MySql返回數據。

// represents conversion on load-from-db operations: 
    public object NullSafeGet(IDataReader rs, string[] names, object owner) 
    { 
     //Custom Logic 
    } 
+0

我試圖在我想要映射的類中實現IUserType接口。但是,這似乎還沒有幫助很多。我的程序在此代碼中斷:ISession session = GetCurrentSession();創建標準().List (); < - 這裏 – AGuyCalledGerald 2010-12-15 12:39:05