5

我正在使用Oracle的受管ODP.NET客户端,并使用实体框架。它工作正常。但是,我在不同的服务器上有不同的行为。我很确定它与DLL版本有关,但到目前为止我找不到任何差异。EF + ODP.NET:指定的值不是类型'Edm.Decimal'的实例

我有这些表:

create table parent (
    parent_id number primary_key, 
    data varchar2(100) 
); 
create table child (
    child_id number primary key, 
    parent_id number references parent(parent_id) 
); 

而这些实体:

public class Parent { 
    Int32 Id { get; set; } 
    string Data { get; set; } 
} 
public class Child { 
    Int32 Id { get; set; } 
    Parent Parent { get; set; } 
} 

这是代码:

Entities e = new Entities(connectionString); 
Parent p = new Parent(); 
parent.Data = "TEST DATA!"; 
Child c = new Child(); 
c.Parent = p; 
e.Children.AddObject(c); 
e.SaveChanges(); // exception here, in one server, not on the other 

我有一个触发自动填充的id (父母和孩子)和我都是在实体框架配置上使用Store Generated Pattern = Identity

我的问题是:

在我的dev的机器,它完全按照预期。两行都插入到它们各自的表中。但是,在服务器上,我收到错误消息:The specified value is not an instance of type 'Edm.Decimal'

更多信息:

Oracle.ManagedDataAccess(V 4.121.1.0) 实体框架(五v4.0.30319.1)

在两个:开发机(工作)+服务器(不工作)。

想法?

+0

我也有同样的问题。我的QA服务器部署很好,但是我的Production Server不工作。我有我的类型大小设置为Number(20)和我的.NET类型长。太奇怪了,到目前为止更改为十进制的建议对我来说没有意义,因为它在某些环境中工作。仅供参考,将读取,只是不插入或更新。 – CameronP

回答

4

尝试将Id列的定义从Int32更改为Decimal。我已经有过这个问题好几次了,我认为这个问题已经解决了。

public class Parent { 
    Decimal Id { get; set; } 
    string Data { get; set; } 
} 
public class Child { 
    Decimal Id { get; set; } 
    Parent Parent { get; set; } 
} 
0

安装.Net 4.5应该解决此问题,如Microsoft forum所述。我遇到过同样的问题,这些调用在开发机器上运行良好,但生产失败,即使我的项目是以.net 4为目标,安装.net 4.5也解决了这个问题。

相关问题