我正在使用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一起使用,但在从数据库更新模型后,修改将被覆盖。
答案 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映射和自定义
部分下