BltoolKit:如何获取“空” DateTime字段?
题
如果要映射的字段之一具有DateTime字段,并且DB中的相应值具有'0000-00-00'或'0001-01-01',则请求执行失败。返回以下错误
无法将mysql日期/时间值转换为system.datetime
是否有可能获得这种价值?
我尝试指定“日期时间?”价值作为属性类型 - 它也无济于事(实际上,我没想到这会有所帮助)。
PS我使用mysql 5.1
解决方案
在异常情况下,我使用NHIBERNATE遇到了类似的问题。
这是由于MySQL在日期字段中允许无效日期的唯一“功能”,尤其是使用0000-00-00作为日期而不是null列的默认值。当遇到这样的日期时,当自身转换为日期时间时,它会引发异常。
建议的解决方案是添加
允许零dateTime = true;
对于连接字符串,实际上这对我不起作用。我最终通过更改连接字符串添加来解决问题
转换零dateTime = true;
所以您的app.config部分看起来像这样
<connectionStrings>
<add
name="ConnectionString.MySql"
connectionString="Server=localhost;Port=3306;Database=BLT;Uid=someuser;Convert Zero DateTime=true;"
providerName="MySql.Data.MySqlClient"/>
其他提示
您是否尝试过MapValue属性?我不确定这是否会起作用,但是...
[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
我认为您必须通过另一个属性来控制它。
[MapField("the_date")]
public DateTime? theDate; // Map
[MapIgnore]
public DateTime theDateControl
{
set {
if(theDate.HasValue)
{
....
}
}
}
不隶属于 StackOverflow