5

我将 Oracle 的托管 ODP.NET 客户端与Entity Framework一起使用。它工作正常。但是我在不同的服务器上有不同的行为。我很确定它与 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)

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

想法?

4

2 回答 2

4

尝试将Id列的定义从更改Int32Decimal。我已经多次遇到这个问题,我认为这解决了它。

public class Parent {
    Decimal Id { get; set; }
    string Data { get; set; }
}
public class Child {
    Decimal Id { get; set; }
    Parent Parent { get; set; }
}
于 2013-10-31T13:48:14.567 回答
0

安装 .Net 4.5 应该可以解决此Microsoft 论坛中指出的问题。我遇到了同样的问题,调用在开发机器上运行良好,但在生产中失败,即使我的项目针对 .net 4,安装 .net 4.5 也解决了这个问题。

于 2015-11-06T11:55:55.117 回答