使用Dapper从MySql映射Date字段时出现InvalidCastException

时间:2012-07-29 16:45:06

标签: c# .net mysql dapper

我刚刚开始使用Dapper访问MySql数据库,在处理日期字段时似乎遇到了问题。每当我尝试映射MySql日期类型字段时,我都会收到无效的强制转换。似乎MySql连接器返回一个MySqlDateTime类型,导致Dapper将其强制转换为Object而不是日期时间。这是相关代码

我的模型上的属性定义

public DateTime PickupDate { get; set; }

MySql中的字段定义

PickupDate DATE

被抛出的异常

System.Data.DataException : Error parsing column 1 (PickupDate= - Object)
----> System.InvalidCastException : Specified cast is not valid.

我知道它一定是我遗漏的东西,任何人都可以指出我正确的方向,我需要做些什么才能将这个字段映射到DateTime数据类型?

1 个答案:

答案 0 :(得分:7)

答案是在连接字符串中将AllowZeroDateTime设置为false。从MySql连接字符串选项doc找到here

  

如果设置为True,则MySqlDataReader.GetValue()返回具有不允许值的日期或日期时间列的MySqlDateTime对象,例如零日期时间值,以及有效值的System.DateTime对象。如果设置为False(默认设置),则会导致为所有有效值返回System.DateTime对象,并为不允许的值抛出异常,例如零日期时间值。

出于某种原因,即使使用有效日期,我也会获得MySqlDateTime类型而不是DateTime。将此更改为false会导致正确的行为发生。