2010-12-09 26 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