0

我在 MVC4 应用程序中使用带有 EF 的 ODP.NET。执行以下操作时,

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

它抛出异常

[指定的强制转换无效。] Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i)

我不明白的是我的用户对象没有 Int 字段,我将它们全部设为十进制以使用 Oracle DB 平滑处理。我的用户表:

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 构建的。

4

1 回答 1

1

需要明确的是,GetDecimal 方法的 Int32 参数是列的索引 - 它在尝试转换索引为“i”的列时抛出错误。它不是试图将任何东西转换为 int。

也就是说,我的猜测是您的 User 对象有一个不可为空的小数字段(十进制?),但您的一些列(如 scheme_id 和 product_id)允许数据库中的空值。

于 2013-08-21T13:21:26.130 回答