Dapper lançant une exception de conversion invalide lors de l'utilisation de paramètres de requête fortement typés avec Sybase ASE

c# dapper

Question

Comme l'indique le titre de la question, la spécification Specified cast is not valid même si mon proc stocké renvoie un int et un DateTime et que ma classe le définit de la même manière.

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

Lorsque j'exécute cette requête:

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

Je reçois les 2 exceptions suivantes:

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 je modifie les propriétés de Foo de int en decimal et DateTime en string il remplit correctement les valeurs. Mais, ceci introduit une étape supplémentaire de définition d'une autre classe qui contient les types de variables corrects, puis mappe de Foo à la nouvelle classe.

J'ai également essayé de parcourir GetTypeDeserializer dans la source Dapper pour voir ce qui se passait, mais je ne suis pas très familier avec les emit IL.

Réponse populaire

peut-être que le problème est dans la procédure stockée, mais en attendant, vous pouvez utiliser

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi