使用EF4将Int32转换为Oracle编号(5)

时间:2012-11-09 15:38:12

标签: oracle c#-4.0 entity-framework-4

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

我的字段在我的数据库中定义为NUMBER(5)。在我的模型中,EF将其定义为short。 我的问题是我有一些大于32,767的值(最多短) 我找到了这篇文章:Entity Framework generates short instead of 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中转换(见编辑)

是否有解决方案让它适用于这两种方式?

BTW,有没有办法告诉实体使用int32 for oracle INTEGER字段?它默认使用小数。

修改

在逐步调配时,我发现为什么我的值为-31073。我忘了这句话:

dao.Value = (short)dto.Value;

我的两个值是int,但隐含的转换就是原点。

2 个答案:

答案 0 :(得分:7)

我找到了如何删除错误。

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

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

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

答案 1 :(得分:1)

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

  <oracle.dataaccess.client>
    <settings>
      <add name="int32" value="edmmapping number(9,0)" />
    </settings>
  </oracle.dataaccess.client>