小巧精緻,十進制加倍?解析列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)) (注意所有重要的? in該typeof )。

編輯 :實際上,我推送到git的修復程序比修復Convert.ChangeType要復雜得多 - 它現在根據需要解析運算符,因此decimal <===> double轉換使用IL靜態調用。

這將在下一個版本中修復。或者您可以在本地構建。以下現在通過:

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
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因