Dapper, Dezimal, um zu verdoppeln? Fehler beim Analysieren der Spalte X

dapper oracle parsing

Frage

Meine Datenbank ist Oracle. I Benutzer Dapper 1.13, der eine Ausnahme mit dem Error parsing column 3 (LATITUDE=39.2330 - Decimal) . LATITUDE ist ein double? tippe meine Entität ein.

Bitte hilf mir.

Vielen Dank

Akzeptierte Antwort

Ja, das ist ein Fehler. lokal behoben haben - im Grunde ändere Zeile 2367 (wow, wann ist diese Datei so groß geworden?) von:

il.Emit(OpCodes.Ldtoken, unboxType);

zu:

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

Im Grunde ist es aussendet: (decimal?)Convert.ChangeType(val, typeof(decimal?)) , Wenn es emittiert werden soll (decimal?)Convert.ChangeType(val, typeof(decimal)) (beachten Sie die alle wichtigen ? In der typeof ).

Edit : Eigentlich ist das Update, das ich an git gepusht habe, ein bisschen komplexer als das Fixieren von Convert.ChangeType - es löst jetzt Operatoren nach Bedarf auf, so dass die decimal <===> double Conversions IL static-call verwenden.

Dies wird im nächsten Build behoben. Oder Sie können lokal erstellen. Folgendes passiert nun:

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; }
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum