yul*_*ulh 3 oracle parsing dapper
我的数据库是Oracle.我使用Dapper 1.13,它抛出异常说法Error parsing column 3 (LATITUDE=39.2330 - Decimal).LATITUDE是double?我实体中的一种类型.
请帮我.
谢谢
是的,这是一个错误; 在本地固定 - 基本上,更改行2367(哇,该文件何时变得如此之大?)来自:
il.Emit(OpCodes.Ldtoken, unboxType);
Run Code Online (Sandbox Code Playgroud)
至:
il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);
Run Code Online (Sandbox Code Playgroud)
基本上,它正在发射:(decimal?)Convert.ChangeType(val, typeof(decimal?))当它应该发射时(decimal?)Convert.ChangeType(val, typeof(decimal))(注意其中的重要?部分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; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |