如何接收零MySQL-Timestamp-Values

时间:2010-12-09 16:37:20

标签: .net mysql nhibernate

使用.Net和NHibernate,我从MySql-Database表中绘制数据。它包含一个数据类型为MySQL-Timestamp的列,其默认值为零(0000-00-00 00:00:00)。

我将列映射到我班级的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);
    }

我不知道这是否正确。 (导致问题的DateTime值是 该班的第6个财产。)

我的程序在此代码中断:

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

2 个答案:

答案 0 :(得分: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是我将零值映射到的地方。

答案 1 :(得分:0)

您可以按照自己喜欢的方式实现IUserType并管理MySql返回数据。

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