2013-08-20 124 views
0

我在MVC4应用程序中使用带有EF的ODP.NET。当执行下面的操作,从Int32到Decimal的转换无效

_db.Set<User>().FirstOrDefault(x => x.Email == Email || x.DisplayName == DisplayName) 

它抛出异常

[指定的转换是无效的。] Oracle.DataAccess.Client.OracleDataReader.GetDecimal(的Int32 I)

什么我不明白的是,我的用户对象没有Int字段,我将它们全部用十进制来平滑Oracle数据库。 我的用户表:

CREATE TABLE USERS (
USER_ID NUMBER(38) NOT NULL, 
DISPLAY_NAME VARCHAR2(50 CHAR), 
IS_LOCKED_OUT_FL VARCHAR2(1 CHAR), 
IS_LOCKED_REASON VARCHAR2(256 CHAR), 
IS_DELETED_FL VARCHAR2(1 CHAR), 
EMAIL VARCHAR2(254 CHAR), 
TITLE VARCHAR2(20 CHAR), 
FIRSTNAME VARCHAR2(150 CHAR), 
SURNAME VARCHAR2(150 CHAR), 
DATECREATED DATE DEFAULT SYSDATE, 
SCHEME_ID NUMBER(38), 
STATUS VARCHAR2(20 CHAR) DEFAULT 'New', 
PHONE VARCHAR2(20 CHAR) DEFAULT '', 
PRODUCT_ID NUMBER(38) DEFAULT 0, 
CONSTRAINT BCARD_USERS_PK PRIMARY KEY (USER_ID), 
CONSTRAINT UK_BCARD_USERS UNIQUE (SCHEME_ID)) 
TABLESPACE SYSTEM 
STORAGE (
    INITIAL 64K 
    NEXT 1M 
    MAXEXTENTS UNLIMITED 
) 

我甚至不知道是不是因为错误是由ODP.NET导致从哪里开始调试,我不能踏进图书馆。我还应该提到,这不会发生在我的32位开发机器上,但是相同的代码在使用相同的32位库的64位生产机器 上抛出异常。我的项目是构建目标AnyCPU。

+1

GetDecimal方法的Int32参数是列的索引 - 它试图将索引“i”转换为列时发生错误。它不是试图将任何东西转换为int。 –

回答

1

清楚的是,GetDecimal方法的Int32参数是列的索引 - 它试图将列转换为索引'i'时发生错误。它不是试图将任何东西转换为int。这就是说,我的猜测是你的用户对象有一个不能为空的十进制字段(decimal?),但你的一些列如scheme_id和product_id允许在数据库中有空值。

+0

我会看看。 –

+0

你能否把你的评论作为你答案的更新?这实际上是问题所在。 –

+0

已完成,但请详细说明问题所在。 –

相关问题