Dapper che lancia un'eccezione di cast non valida quando si utilizzano parametri di query fortemente tipizzati con Sybase ASE

c# dapper

Domanda

Come afferma il titolo della domanda, sto ottenendo che il Specified cast is not valid eccezioni Specified cast is not valid anche se il mio stored proc restituisce un int e un DateTime e la mia classe lo definisce lo stesso.

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

Quando eseguo questa query:

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

Ottengo le seguenti 2 eccezioni:

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)

Se Foo le proprietà di Foo da int a decimal e DateTime a string , popola correttamente i valori. Ma questo introduce un ulteriore passo nella definizione di un'altra classe che contiene i tipi di variabile corretti e quindi esegue il mapping da Foo alla nuova classe.

Ho anche provato ad GetTypeDeserializer nel sorgente di Dapper per vedere cosa sta succedendo, ma non ho molta familiarità con l'emit di IL.

Risposta popolare

forse il problema è nella procedura Stored, ma nel frattempo puoi usare

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché