我正在使用Oracle的托管ODP.NET客户端和实体框架。它工作正常。但是我在不同的服务器上有不同的行为。我很确定它与DLL版本有关,但到目前为止我找不到任何差异。
我有这些表格:
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
配置。
我的问题是:
在我的开发机器上,它按预期完美运行。两行都插在各自的表中。但是,在服务器上,我收到错误消息:The specified value is not an instance of type 'Edm.Decimal'
。
更多信息:
Oracle.ManagedDataAccess(v 4.121.1.0) 实体框架(v v4.0.30319.1)
同时:dev机器(工作)+服务器(不工作)。
想法?
答案 0 :(得分: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; }
}
答案 1 :(得分:0)
安装.Net 4.5应解决此Microsoft forum中指出的问题。我遇到了同样的问题,这些调用在开发机器上工作正常,但在生产中失败了,即使我的项目是针对.net 4,安装.net 4.5也解决了这个问题。