Dapperを変更して、データベースのNULL値をdoubleにマップします.NaN

.net ado.net dapper sqlite

質問

私は自分のSQLiteデータベースにヌル可能な二重列を持っています。

データベースから読み込むとき(double型のカラムの場合)、nullを "double.NaN"に変換したいと思います。

現在、dapperはnull値を0に設定しますが、これは嫌です。

私の選択肢は何ですか?

  1. Dapperソースコードを変更します。
  2. Dapperを使用することはできません。独自のADO.NETコードを旧式の方法で記述する必要がありますか?
  3. cnn.Queryメソッドを呼び出す方法を変更して、マッピングの方法を変更します。

私の最初の選択肢はオプション1ですが、私はDapperの修正を助ける必要があります。

受け入れられた回答

個人的には、私はこれに反対することを勧めます。 nullはNaNと全く同じではありません。本当にこれをやりたければ、 GetTypeDeserializerを調べる必要があります。これを行うコードは、 ILGeneratorを使用して動的に生成され、かなり複雑です。あなたが行を探す場合:

il.MarkLabel(isDbNullLabel); // incoming stack: [target][target][value]

これは、 DbNullが検出された場合にコードが分岐するDbNullです。現在のところ、スタックから2つの値(値とターゲット)をポップし、床にドロップして実行します。特別なケースとしてfloat / doubleをチェックし、変換を適用してからNaNをメンバーに割り当てる必要があります。

しかし、私はこれが単に有効なことではないという主張を繰り返す。はるかに単純なオプションがあります:

public double? Value {get;set;}

これは変更を必要とせず、現在は機能します。あなたが本当に本当に望むなら、それはnullを許さないdoubleとして扱われます。

private double foo = double.NaN;
public double Foo { get { return foo; } set { foo = value; } }

これはデフォルトでNaNになり、値がある場合は正しくマテリアNaNれます。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow