2016-10-12 4 views
2

に対して大きすぎたり小さすぎのいずれかでした).toList();オラクルEntityFramework原因OverflowExceptionが付きます。値は、私は、単純なLINQの式</p> <p>VARリスト= db.MyEntity.Where(X => x.fields == 'stringdata' を持つInt16型

実行時には、この式は、例外をスロー:

[OverflowException: Value was either too large or too small for an Int16.] 
       System.Convert.ToInt16(Int32 value) +6765512 
       System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +14182618 
       Oracle.ManagedDataAccess.Client.OracleDataReader.ChangeType(Object sourceValue, Type targetType) +810 
       Oracle.ManagedDataAccess.Client.OracleDataReader.GetValue(Int32 i) +4640 
       System.Data.Entity.Core.Common.Internal.Materialization.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) +229 
       lambda_method(Closure , Shaper) +3648 
       System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly(Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) +244 
       lambda_method(Closure , Shaper) +438 
       System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) +383 

私EntityFrameworkは、Oracle表に結合しています。列がInt16より大きいデータを持っていると思われます。

  • なぜEntityFrameworkで正しいタイプが設定されていないか、 の精度が設定されていますか?
  • ここで私はこれを修正できますか?edmxを手動で編集しますか?
  • 私が修正した場合、次回に私のedmxスキーマを 更新するときに手動でデザインによって上書きされますか?
+0

は、一般的にこの手段データソースとバインドしようとしているC#クラスのデータ型が競合しています。私。 C#クラスにはintがありますが、対応する列はintではありません。 ----あなたがFineOne()やFirst()を試してみましたが、それは単なるデータではなく、すべての行が間違っているかどうかを確認しましたか? – mmcrae

+0

@mmcraeいいです!私はそれを試みます。そして今...私は匿名のタイプnew {field、field、field ....}を返すことを考えています。おそらく、エラーを引き起こすフィールドを分離することができます – JudgeProphet

答えて

3

私はそれを見つけました。私は、Oracle DatabaseでNumber(5)として定義された列を取得しました。 EFマップ番号(5)はInt16/Short整数型のようです。しかし、Number(5)の列は99999までの値を保持できます。これは「短い」整数よりもはるかに大きくなります。

だから、私は.edmxファイルてmanualyを編集し、私の

ここでOracleとカスタムマッピングタイプのためのより多くのドキュメントがあります長い間のInt32 /のために私はInt16 /ショートタイプを交換するクラスを生成します。 http://docs.oracle.com/cd/E63277_01/win.121/e63268/entityDataTypeMapping.htm#ODPNT8303

関連する問題