如果要映射的字段之一具有 DateTime 字段并且 DB 中的相应值具有“0000-00-00”或“0001-01-01”,则请求执行失败。返回以下错误
无法将 MySQL 日期/时间值转换为 System.DateTime
有没有可能获得这样的价值?
我试图指定“日期时间?” value 作为属性类型 - 它也无济于事(实际上,我没想到会有帮助)。
PS我使用MySql 5.1
我在使用 NHibernate 时遇到了类似的问题,但在异常中出现了相同的错误。
这是由于 MySQL 允许在 DATE 字段中使用无效日期的独特“功能”,特别是使用 0000-00-00 作为 DATE NOT NULL 列的默认值。当遇到这样的日期时,它会在将自身转换为 DateTime 时引发异常。
建议的解决方案是添加
允许零日期时间=真;
连接字符串,但实际上这对我不起作用。我最终通过更改连接字符串添加解决了这个问题
转换零 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)
{
....
}
}
}