7

我正在使用带有 oracle 10g 数据库的 EF 4(首先是数据库,完全由它生成的模型),但我遇到了一个字段的问题。

NUMBER(5)我的字段在我的数据库中定义为 a 。在我的模型中,EF 将其定义为short. 我的问题是我的一些值大于 32,767(最大短)我发现这篇文章:实体框架生成 short 而不是 int。我按照说明进行操作,我的模型现在包含 Int32 值。

但我有一个新问题:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in type 'Model.Store.XXX'.

此错误始终显示在 Visual Studio 的错误列表选项卡中。但是,构建成功,并且成功了一半:

  • 读取数据库作品中的值
  • 写一个值不起作用:99999 被转换为 -31073(见编辑)

有没有办法让它双向工作?

顺便说一句,有没有办法告诉实体将 int32 用于 oracle INTEGER 字段?它默认使用十进制。

编辑

在一步步调试的过程中,我发现为什么我的值是-31073。我忘记了这一行:

dao.Value = (short)dto.Value;

我的两个值是 int,但简而言之,隐式转换是原点。

4

2 回答 2

7

我找到了如何消除错误。

我以 xml 模式编辑了 edmx 文件,在 ssdl 部分找到了我的字段:

<Property Name="SIT_INSEE" Type="number" Precision="5" />

我删除了Precision="5",警告消失了。

于 2012-12-05T09:17:04.097 回答
1

只是加我的两分钱,以防其他人遇到类似的问题。我注意到如果您将以下内容添加到 web.config 中的映射,然后从头开始重新创建 edmx 模型(删除它并从数据库重新生成),它可以解决其中的一些问题。简单地将值添加到 web.config 并没有解决任何问题(我猜可能会在幕后重新生成一些代码)。

  <oracle.dataaccess.client>
    <settings>
      <add name="int32" value="edmmapping number(9,0)" />
    </settings>
  </oracle.dataaccess.client>
于 2013-10-03T15:24:47.047 回答