.NET ODP托管驱动程序用户映射无法正常工作

时间:2015-11-03 10:47:16

标签: asp.net oracle entity-framework mapping odp.net

我正在使用EF6 ModelFirst和Oracle ODP托管驱动程序12c来开发.NET应用程序(一个只包含一个项目的解决方案)

我遇到了Oracle和.NET之间的映射问题。

我正在尝试在web.config中指定自定义映射:

<oracle.manageddataaccess.client>
 <version number="*">
  <edmMappings>
    <edmMapping dataType="number">
      <add name="bool" precision="1" />
      <add name="byte" precision="3" />
      <add name="int16" precision="4" />
      <add name="int32" precision="9" />
      <add name="int64" precision="18" />
    </edmMapping>
  </edmMappings>
  <dataSources>
    ...
  </dataSources>
 </version>
</oracle.manageddataaccess.client>

生成.edmx后,number(5)列仍然映射到“short”.NET Type(Int16)

显然,这种.NET类型不适合像59000这样的邮政编码

如果我在.edmx中修改从Int16到Int32 Type的列映射,我得到2019错误,指出我的映射不正确

解决方法:当我修改edmx的xml版本时,如果删除列的精度,它将与Int32一起使用,但在从数据库更新模型后,修改将被覆盖。

1 个答案:

答案 0 :(得分:3)

使用EF 6更改了edmMappings语法。

您现在必须使用以下语法:

<oracle.manageddataaccess.client>
    <version number="*">  
      <edmMappings>
        <edmNumberMapping>
          <add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" />
          <add NETType="byte" MinPrecision="2" MaxPrecision="3" DBType="Number" />
          <add NETType="int16" MinPrecision="4" MaxPrecision="4" DBType="Number" />
          <add NETType="int32" MinPrecision="5" MaxPrecision="9" DBType="Number" />
          <add NETType="int64" MinPrecision="10" MaxPrecision="18" DBType="Number" />
        </edmNumberMapping>  
      </edmMappings>      
    </version>
  </oracle.manageddataaccess.client>

现在需要在每一行上指定DBType,而不是作为映射部分的属性。

您还使用NETType而不是名称。

最后,您必须定义最小和最大精度。

文档链接:Oracle Number Default Data Type Mapping and Customization实体框架6映射和自定义

部分下
相关问题