我刚刚开始使用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数据类型?
答案 0 :(得分:7)
答案是在连接字符串中将AllowZeroDateTime设置为false。从MySql连接字符串选项doc找到here。
如果设置为True,则MySqlDataReader.GetValue()返回具有不允许值的日期或日期时间列的MySqlDateTime对象,例如零日期时间值,以及有效值的System.DateTime对象。如果设置为False(默认设置),则会导致为所有有效值返回System.DateTime对象,并为不允许的值抛出异常,例如零日期时间值。
出于某种原因,即使使用有效日期,我也会获得MySqlDateTime类型而不是DateTime。将此更改为false会导致正确的行为发生。