EF EDM Builder Oracle编号(1,0) - > INT16 /布尔

时间:2012-06-05 16:35:29

标签: oracle entity-framework edmx

我正在使用EF和oracle数据库。我们在数据库中的一个列的数据类型为Number(1,0)。该字段存储在C#中转换为Int16的数据。 Visual Studio中的实体数据模型(EDM)构建器将此列映射为Bool默认值。这会导致数据类型错误。我想要做的是配置模型生成器将数字(1,0)始终设置为Int16字段而不是bool。

我该怎么做。

我还想提一下,当一位开发人员在他的机器上构建这个模型时,它会将其设置为Int16(短)。当我在我的机器上这样做时,它确实会爆炸。我们无法弄清楚为什么我们中的一个人会看到与另一个人不同的结果。

由于

3 个答案:

答案 0 :(得分:2)

假设您正在使用Oracle的提供程序(也称为ODAC,ODP.NET,ODT)......

您可以将自定义映射部分添加到包含EDMX(用于设计时间)和可执行程序集(用于运行时)的程序集的app.config文件中,以更改默认映射。 请参阅more details here

E.g。

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

考虑到数字(1,0)的范围是-9..9,因此不适合int16 或甚至是字节(两者都有更大的范围)。

您可以找到a list of recommended mappings here

修改

有关较新的托管服务提供商的设置,请参阅my answer here

答案 1 :(得分:2)

我遇到过类似的问题。 (尝试将数字(1)从默认bool映射到int16)

我使用ODP.net 12.1.24在oracle11上使用EF6和VS2013。

最后,我通过将以下部分添加到我的app.config来解决它:

<oracle.manageddataaccess.client>
  <version number="*">
    <edmMappings>
      <edmNumberMapping>
        <add NETType="int16" MinPrecision="1" MaxPrecision="4" DBType="Number"/>
      </edmNumberMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>

答案 2 :(得分:-1)

根据此表:

http://docs.oracle.com/cd/E11882_01/win.112/e18754/featLINQ.htm

Oracle中的Nmber(1,0)是Int16

但按照上述文件: “您可以在.NET配置文件中配置自定义映射以覆盖Number(p,0)Oracle数据类型的默认映射。例如,Number(1,0),默认情况下映射到Int16,可以自定义映射到.NET Bool或.NET Byte类型。“

看一下它显示配置应该如何的文档。