使用.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>();
答案 0 :(得分:0)
如果您有想要将其映射到MySQL端的内容,并且您可以控制查询,则可以在SELECT
语句中执行类似
SELECT IF(field!='0000-00-00 00:00:00',field,'2010-01-01 00:00:00')
FROM table
填写field
,table
等,其中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
}