gpt4 book ai didi

c# - 带有 EntityFramework 的 Oracle 导致 OverflowException : Value was either too large or too small for an Int16

转载 作者:行者123 更新时间:2023-11-30 20:33:39 25 4
gpt4 key购买 nike

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

我的 EntityFramework 绑定(bind)在 Oracle 表上。我怀疑某个列的数据大于 Int16。

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

最佳答案

我找到了。我在我的 Oracle 数据库中得到了定义为 Number(5) 的列。似乎 EF 映射 number(5) 为 Int16/Short 整数类型。但是带有 Number(5) 的列最多可以保存 99999 的值,这比“短”整数要大得多。

所以我手动编辑我的 .edmx 文件和我的生成类以将我的 Int16/Short 类型替换为 Int32/long

以下是有关 Oracle 自定义映射类型的更多文档: http://docs.oracle.com/cd/E63277_01/win.121/e63268/entityDataTypeMapping.htm#ODPNT8303

关于c# - 带有 EntityFramework 的 Oracle 导致 OverflowException : Value was either too large or too small for an Int16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com