2

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

我该怎么做。

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

谢谢

4

3 回答 3

2

假设您正在使用 Oracle 的提供程序(又名 ODAC、ODP.NET、ODT)...

您可以将自定义映射部分添加到包含 EDMX(用于设计时)和可执行程序集(用于运行时)的程序集的 app.config 文件中,以更改默认映射。
在此处查看更多详细信息

例如

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

考虑到 number(1,0) 的范围是 -9..9 所以它并不真正适合 int16甚至字节(两者都有更大的范围)。

您可以在此处找到推荐映射列表

编辑:

对于较新的托管提供商的设置,请参阅我的答案here

于 2012-06-05T19:05:35.403 回答
2

我遇到过类似的问题。(试图将 number(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>
于 2016-08-03T14:57:52.423 回答
-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 类型。”

查看文档,它显示了配置的外观。

于 2012-06-05T18:51:10.390 回答