4

我刚刚开始使用 Dapper 访问 MySql 数据库,在处理日期字段时似乎遇到了问题。每当我尝试映射 MySql Date 类型字段时,我都会收到无效的演员表。似乎 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 数据类型?

4

1 回答 1

8

答案是在连接字符串中将 AllowZeroDateTime 设置为 false。从这里找到的 MySql 连接字符串选项文档。

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

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

于 2012-07-30T13:32:30.280 回答