2012-03-07 4 views
2

Как указано в заголовке вопроса, я получаю исключения Specified cast is not valid, хотя мой сохраненный процесс возвращает int и DateTime, а мой класс определяет его одинаково.Dapper бросает недопустимое исключение литья при использовании строго типизированных параметров запроса с использованием Sybase ASE

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

Когда я выполнить этот запрос:

результаты VAR = connection.Query ("spGetFoo", CommandType: CommandType.StoredProcedure);

я получаю следующие 2 исключения:

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) 

Если я изменить свойства Foo «S от int к decimal и DateTime к string это правильно заполнит значения. Но это вводит дополнительный шаг для определения другого класса, который содержит правильные типы переменных, а затем отображение из Foo в новый класс.

Я также пробовал пройти через GetTypeDeserializer в источнике Dapper, чтобы узнать, что происходит, но я не очень хорошо знаком с испусканием ИЛ.

+2

вы уверены, что spGetFoo возвращается как междунар и DateTime? можете ли вы показать SQL и, возможно, определения столбцов? –

+0

Конечно, было бы приятно видеть, что хранимый прокс .... –

ответ

1

может быть, проблема в хранимой процедуре, но в то же время вы можете использовать

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

 Смежные вопросы

  • Нет связанных вопросов^_^