2016-09-16 8 views
1

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データベース間で複製したアプリケーションの一部であるため、私たちは本当に(サードパーティのデータベース、我々には主キーが存在しないすべての列をしたいですかということです複製する必要があります)。

+1

あなたの質問に「T」、「@ sql」と関連するSQL DDLの定義を追加できますか? –

+0

もう少し詳細を追加しました。 –

+1

いくつかの提案:http://stackoverflow.com/q/10000203/173225、あなたは小さなPOCOで再現しようとしましたが、おそらく明示的に列の名前を付けましたか?例えば'SOU_SEQ FROM ... WHERE ... 'を選択し、まだ問題が発生していないかどうかを確認してください。 ODP.Netが答えかもしれません。 –

答えて

0

Dapperの問題ではなく、問題の列を解析中に発生した可能性が最も高いのはOutOfMemoryExceptionです。問題のテーブルは、我々が処理しなければならない最大のものであり、ログは、例外が発生するまでにかなりの期間クエリが実行されていることを示しています。

私は、解析エラーに関するメッセージは問題ではなく、むしろ、解析中にDapperとは無関係のメモリ問題があったという暫定的な回答として追加します。

関連する問題