我有一个简单的linQ表达式
var list = db.MyEntity.Where(x => x.fields ==' stringdata')。toList();
在运行时,此表达式抛出异常:
[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
My EntityFramework在Oracle Table上绑定。我怀疑列的数据大于Int16。
答案 0 :(得分:4)
我找到了。我在Oracle数据库中获得了定义为Number(5)的列。似乎EF地图编号(5)为Int16 /短整数类型。但是带有数字(5)的列可以保持值高达99999,这比“短”整数大得多。
所以我编辑我的.edmx文件manualy和我的生成类来替换Int32 / long的Int16 / Short类型
以下是Oracle的自定义映射类型的更多文档: http://docs.oracle.com/cd/E63277_01/win.121/e63268/entityDataTypeMapping.htm#ODPNT8303