У меня есть POCO, который сопоставляется с таблицей в Oracle. Столбец SOU_SEQ
имеет тип NUMBER(10,0)
и POCO, который представляет этот столбец как long
.Darser Parsing Number as Date
Проблема заключается в том, когда я пытаюсь запустить запрос к этой таблице с Dapper и я получаю следующее сообщение об ошибке:
System.Data.DataException: Error parsing column 8 (SOU_SEQ=09/07/2009 00:00:00 - DateTime) ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at Devart.Data.Oracle.ad.d(Byte[] A_0, Int32 A_1, Int32 A_2) at Devart.Data.Oracle.OracleDataReader.b(Int32 A_0) at Devart.Data.Oracle.OracleDataReader.GetValue(Int32 i) at Devart.Common.DbDataReaderBase.get_Item(Int32 ordinal) at Deserialize3c89d5be-c520-433f-a74f-f2e0bad095da(IDataReader)
--- End of inner exception stack trace --- at Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader, Object value) in D:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 4153 at Deserialize3c89d5be-c520-433f-a74f-f2e0bad095da(IDataReader) at Dapper.SqlMapper.d__147`1.MoveNext() in D:\Dev\dapper-dot-net\Dapper NET45\SqlMapperAsync.cs:line 112
Вероятно, Щеголеватый пытается разобрать этот столбец неправильно как DateTime.
код, который я использую для запроса базы данных выглядит следующим образом:
await connnection.QueryAsync<T>(@sql, token).ConfigureAwait(false);
Определение T
будет заполнить несколько экранов. Однако свойство SOU_SEQ
реализуется следующим образом:
public class MappingClass
{
[System.ComponentModel.DataAnnotations.Key]
[System.ComponentModel.DataAnnotations.Required()]
[System.ComponentModel.DataAnnotations.Schema.Column(Order = 8)]
[System.ComponentModel.DataAnnotations.Schema.DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)]
public virtual long SOU_SEQ
{
get;
set;
}
}
И SQL, который используется SELECT * FROM SCHEMA.TABLE
*.
Есть ли обходной путь для этой проблемы?
* Причина использования *
в том, что мы действительно хотим, чтобы все столбцы, так как это является частью приложения, которое дублирует между Oracle и базой данных SQL Server (нет никаких первичных ключей в базе 3-й партии мы необходимо повторить).
Можете ли вы добавить определение 'T',' @ sql' и соответствующего SQL DDL к вашему вопросу? –
Теперь я добавил немного более подробную информацию. –
Несколько советов: http://stackoverflow.com/q/10000203/173225, вы пытались воспроизвести с меньшим POCO и, возможно, явно называть столбцы? например 'SELECT SOU_SEQ FROM ... WHERE ...' и посмотреть, все еще проблема? Ответ ODP.Net может быть ответом. –