.NET Dapper を使用して、整数値 (0/1) を含むデータベース フィールドを取得して、クラスの null 許容ブール型プロパティにマップする際に問題が発生しています。
物事を単純にするために、問題を再現するために必要な最低限のクラスにクラスを削除して名前を変更しました。
public class Test
{
public bool? TestField { get; set; }
}
次のコードが呼び出されて Test クラスにデータが入力される場合:
var Results = DBConnection.Query<Test>("SELECT 0 As TestField]").ToList();
次のエラーがスローされます。
Invalid cast from 'System.Int32' to 'System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
疑問符を削除して、フィールドを null 非許容のブール値 (つまり public bool TestField) にすると、すべて正常に動作します。
即時の答えは、nullable を削除して 1 日と呼ぶように見えるかもしれません。ただし、これが機能しない理由は、この同じクラスを使用して Web サービスとの間でレコードをシリアル化しているためであり、false と null の違いを識別できる必要があります。null 許容プロパティ型を持つクラスと持たないクラスの 2 つのクラスを持つことを考えましたが、1 つではなく 2 つのクラスを維持するという追加のオーバーヘッドがあります。
プロパティ セット中のカスタム データ変換が理想的です。ただし、これが可能であることを示唆するものは、ダッパーのドキュメントには何も見つかりませんでした。