ダッパー、小数点以下は二重にする?列Xの解析中にエラーが発生しました

dapper oracle parsing

質問

私のデータベースはOracleです。私はユーザーDapper 1.13、 Error parsing column 3 (LATITUDE=39.2330 - Decimal)という例外をスローします。 LATITUDEはdouble?私のエンティティを入力します。

私を助けてください。

ありがとう

受け入れられた回答

うん、それはバグです。ローカルに固定されています - 基本的に、2367行を変更してください(ワウ、そのファイルはいつ大きくなったのですか?):

il.Emit(OpCodes.Ldtoken, unboxType);

に:

il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);

基本的には、発光される: (decimal?)Convert.ChangeType(val, typeof(decimal?))それは発光しなければならないとき(decimal?)Convert.ChangeType(val, typeof(decimal))すべての重要な点に注意してください?にしますtypeof )。

編集 :実際には、私がgitにプッシュした修正はちょうどConvert.ChangeType修正するよりも少し複雑です - decimal <===> double変換でIL static-callを使うようになりました。

これは次のビルドで修正されます。または、ローカルで構築することもできます。次のようになります。

public void TestDoubleDecimalConversions_SO18228523_RightWay()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(1 as float) as A, cast(2 as float) as B, cast(3 as decimal) as C, cast(4 as decimal) as D").Single();
    row.A.Equals(1.0);
    row.B.Equals(2.0);
    row.C.Equals(3.0M);
    row.D.Equals(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_WrongWay()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(1 as decimal) as A, cast(2 as decimal) as B, cast(3 as float) as C, cast(4 as float) as D").Single();
    row.A.Equals(1.0);
    row.B.Equals(2.0);
    row.C.Equals(3.0M);
    row.D.Equals(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_Nulls()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(null as decimal) as A, cast(null as decimal) as B, cast(null as float) as C, cast(null as float) as D").Single();
    row.A.Equals(0.0);
    row.B.IsNull();
    row.C.Equals(0.0M);
    row.D.IsNull();
}

class HasDoubleDecimal
{
    public double A { get; set; }
    public double? B { get; set; }
    public decimal C { get; set; }
    public decimal? D { get; set; }
}


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