我刚开始使用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.
我知道它一定是我遗漏的东西,任何人都可以指出我正确的方向,我需要做什么才能将这个字段的dapper映射到DateTime数据类型?
答案是在连接字符串中将AllowZeroDateTime设置为false。从这里找到的MySql连接字符串选项文档。
如果设置为True,则MySqlDataReader.GetValue()将为具有不允许值的日期或日期时间列返回MySqlDateTime对象,例如零日期时间值,以及有效值的System.DateTime对象。如果设置为False(默认设置),则会导致为所有有效值返回System.DateTime对象,并为不允许的值(例如零日期时间值)抛出异常。
出于某种原因,即使使用有效日期,我也会获得MySqlDateTime类型而不是DateTime。将此更改为false会导致发生正确的行为。