4

Dapper を使用して MySql データベースにアクセスし始めたばかりで、日付フィールドを処理するときに問題が発生しているようです。MySql Date 型フィールドをマップしようとすると、無効なキャストが返されます。MySql コネクタが MySqlDateTime 型を返しているようです。これにより、Dapper はそれを日時ではなくオブジェクトにキャストします。関連するコードは次のとおりです

モデルのプロパティ定義

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 オブジェクトが返され、ゼロの日時値などの許可されていない値に対して例外がスローされます。

何らかの理由で、有効な日付であっても、DateTime ではなく MySqlDateTime 型を取得していました。これを false に変更すると、正しい動作が行われます。

于 2012-07-30T13:32:30.280 に答える