5

FirstOrDefault()オブジェクト セットに対してクエリを実行しようとすると、奇妙な例外がスローされます。

私のコード:

private RecordObject GetRecordByID(int recID)
{
    return _objectSet.FirstOrDefault(rec => rec.ID == recID);
}

例外メッセージ:

入力文字列は、正しい形式ではありませんでした

InnerException無効です。

スタックトレース:

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer&         number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Convert.ToDecimal(String value, IFormatProvider provider)
at System.String.System.IConvertible.ToDecimal(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at Oracle.DataAccess.Client.OracleDataReader.ChangeType(Object sourceValue, Type targetType)
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

奇妙なことは、型変換を行っていないことです。

PS:データベースは Oracle 10g ですが、私は EF を使用しているので、これは問題ではないと思いますが、この詳細が必要な場合に備えて。

4

2 に答える 2

3

わかりました。これを整理しました。誰かが同じ問題を抱えている場合に備えて、この質問を続けます。

これを解決するには、データベースからテーブルを再インポートする必要がありました。どうやら、ADO.Netオブジェクトとデータベースの間に互換性のない列がいくつかありました。

EFは私の間違いを補うためにキャスト操作を行おうとしていたと思います(互換性のないバージョンを残します)。キャストは不可能であり、これが型変換の元となった場所です。

皆さん、ありがとうございました。

于 2012-05-03T11:58:41.080 に答える
0

int をデータベース (ID) の null 列と比較していないかどうかを確認してください。

PS 渡された recId は null ではありませんが、チェック対象の値がデータベース テーブルで null である可能性があります

于 2012-05-03T11:48:16.690 に答える