带有EntityFramework的Oracle导致溢出异常:对于Int16,值太大或太小

时间:2016-10-12 17:12:13

标签: c# oracle entity-framework

我有一个简单的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。

  • 为什么EntityFramework没有设置正确的类型和or 精度?
  • 我在哪里以及如何解决这个问题,手动编辑edmx?
  • 如果我手动修复它,下次我会被设计覆盖 更新我的edmx架构?

1 个答案:

答案 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