0

如果要映射的字段之一具有 DateTime 字段并且 DB 中的相应值具有“0000-00-00”或“0001-01-01”,则请求执行失败。返回以下错误

无法将 MySQL 日期/时间值转换为 System.DateTime

有没有可能获得这样的价值?

我试图指定“日期时间?” value 作为属性类型 - 它也无济于事(实际上,我没想到会有帮助)。

PS我使用MySql 5.1

4

3 回答 3

2

我在使用 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"/>

于 2011-05-31T17:17:18.907 回答
1

您是否尝试过 MapValue 属性?我不确定这是否可行,但是...

[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
于 2011-04-06T06:24:02.673 回答
0

我认为你必须通过另一个属性来控制它。

 [MapField("the_date")]
 public DateTime? theDate; // Map
 [MapIgnore]
 public DateTime theDateControl
 {
     set {
         if(theDate.HasValue)
         {
            ....
         }
     }
 }
于 2014-10-27T04:19:11.323 回答