我在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。
GetDecimal方法的Int32参数是列的索引 - 它试图将索引“i”转换为列时发生错误。它不是试图将任何东西转换为int。 –