Dapper lanzó una excepción de conversión inválida al usar parámetros de consulta fuertemente tipados con Sybase ASE

c# dapper

Pregunta

Como dice el título de la pregunta, Specified cast is not valid excepciones Specified cast is not valid a pesar de que mi proc almacenado devuelve un int y un DateTime y mi clase lo define de la misma manera.

public class Foo
{
    public int Id {get; set;}
    public DateTime CreatedDate {get; set;}
}

Cuando ejecuto esta consulta:

var results = connection.Query ("spGetFoo", commandType: CommandType.StoredProcedure);

Obtengo las siguientes 2 excepciones:

InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 1 (Id=1 - Decimal)

InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 2 (CreatedDate=Mar  7 2012  5:52:08:276PM - String)

Si Foo las propiedades de Foo de int a decimal y DateTime para string , se rellenarán correctamente los valores. Pero esto introduce un paso adicional de definición de otra clase que contiene los tipos de variables correctos y luego mapeo de Foo a la nueva clase.

También probé con GetTypeDeserializer en la fuente de Dapper para ver qué está pasando, pero no estoy muy familiarizado con la emisión de IL.

Respuesta popular

tal vez el problema esté en el procedimiento Almacenado, pero mientras tanto puedes usar

public class Foo
{
    private decimal _dbId;
    public decimal DbId 
    { 
        get { return _dbId; }
        set 
        { 
            _dbId = value;
            _id =(int)value;
        }
    }
    private String _dbCreadtedDate;
    public String DbCreadtedDate 
    { 
        get { return _dbCreadtedDate; }
        set 
        {
            _dbCreadtedDate = value;
            _createdDate = DateTime.Parse(_dbCreadtedDate);
        }
    }
    private int _id;
    public int Id 
    { 
        get { return _id; } 
        set { _id = value; _dbId = value; } 
    }
    private DateTime _createdDate;
    public DateTime CreatedDate 
    { 
        get { return _createdDate; } 
        set { _createdDate = value; _dbCreadtedDate = value.ToString(); } 
    }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué