EF + ODP.NET:指定的值不是类型为“Edm.Decimal”的实例。

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

我有一个触发器自动填充(parent和child的)id,同时我在Entity Framework配置中使用了Store Generated Pattern = Identity

我的问题是:

在我的开发机器上,它完美地按预期工作。两行都插入到它们各自的表中。但是,在服务器上,我遇到了一个错误,提示:The specified value is not an instance of type 'Edm.Decimal'

更多信息:

Oracle.ManagedDataAccess (v 4.121.1.0) Entity Framework (v v4.0.30319.1)

这在开发机器(工作正常)和服务器(不工作)上都是如此。

有什么想法吗?


我也遇到了同样的问题。我的QA服务器部署正常,但我的生产环境却无法工作。我将类型大小设置为Number(20),.NET类型为long。如此奇怪,到目前为止建议更改为decimal对我来说没有意义,因为它在某些环境中确实有效。FYI,可以读取,但无法插入或更新。 - CameronP
2个回答

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

Microsoft 论坛上发现,安装 .Net 4.5 应该可以解决这个问题。我也遇到了同样的问题,开发机器上调用很正常,但是在生产环境中失败了。即使我的项目面向 .net 4 ,安装 .net 4.5 也解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接