OracleのテーブルにマップするPOCOがあります。列SOU_SEQ
は、タイプNUMBER(10,0)
であり、この列を表す列がlong
であるPOCOです。大まかにパースする日付を
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
Dapperのは、日時として誤ってこの列を解析しようとしていることが表示されます:私はDapperの持つそのテーブルに対してクエリを実行しようと、私は次のエラーを取得するとき
問題
です。次のように私は、データベースを照会するために使用していたコードは次のとおりです。
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データベース間で複製したアプリケーションの一部であるため、私たちは本当に(サードパーティのデータベース、我々には主キーが存在しないすべての列をしたいですかということです複製する必要があります)。
あなたの質問に「T」、「@ sql」と関連するSQL DDLの定義を追加できますか? –
もう少し詳細を追加しました。 –
いくつかの提案:http://stackoverflow.com/q/10000203/173225、あなたは小さなPOCOで再現しようとしましたが、おそらく明示的に列の名前を付けましたか?例えば'SOU_SEQ FROM ... WHERE ... 'を選択し、まだ問題が発生していないかどうかを確認してください。 ODP.Netが答えかもしれません。 –