类型为number(10)
的oracle数据库中的字段,大于.net Int32
范围。
我现在使用实体框架从该表中获取数据,并将其映射到该表的数据库实体。但是,当我获取数据时,我收到了这个错误:
var competitions = db.PKG_API_PORTAL_SP_GETFBCOMPETITION().ToList();
关键字段''的类型应该是'System.Int32',但是 提供的值实际上是'System.Int64'类型。
我发现了这个问题Oracle Data Provider to CLR type mapping
以下是解释数据类型如何翻译的文章 http://www.devart.com/dotconnect/oracle/docs/DataTypeMapping.html
但现在我需要一个解决方案来解决这个问题。
答案 0 :(得分:0)
我假设,因为您正在使用带有EF的DotConnect For Oracle,您将从函数/ SP返回一个Refcursor,并将其投影到数据类型。
您有三种方法可以解决问题: 1-将要映射的对象中的类型更改为Int64。这是最简单的解决方案。如果您正在使用实体开发人员,只需在地图中选择类型,将类型更改为' int64',然后点击确定,重新生成您的课程。
2-更改返回的Refcursor,将数字(10)向下转换为数字(9)。这可能会损害性能,最终会破坏某些东西,所以我不推荐它。
答案 1 :(得分:0)
NUMBER(n)类型的每一列代表一个INT64。 " N"充当表的约束,但其中的所有数据都是相同的大小。 您最好在客户端转移到Int64类型。 干杯!