微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – Oracle Managed Dataacess EF6自定义edm映射不适用

我们的oracle db中有很多number(5,0)实例,oracle提供程序认为Int16.这会导致问题,因为我们可以使用比int16范围中允许的值更大的值. Oracle建议使用自定义映射覆盖edm映射(请参阅docs: https://docs.oracle.com/cd/E56485_01/win.121/e55744/entityDataTypeMapping.htm#ODPNT8300).

我面临的问题是即使在我的asp.net mvc项目的web.config中使用这些自定义映射,覆盖也不适用.我还创建了一个全新的控制台应用程序来测试这个,也没有运气.

有谁知道如何使其工作或有更好的解决方案?

我可能应该添加这个信息,

> VS 2015 EF6 Oracle托管数据访问NuGet的最新版本
>我知道文档说您可以手动编辑表映射中的类型
但是当你试图改变它们时,它会与emd模型发生冲突
生成错误.
>解决方法,您手动编辑xml
删除精度在短期内是好的,但每次都必须
从DB更新它会覆盖更改.这是我的苦差事
一些表格中有40多个企业需要编辑

(下面是web.config / app.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>
    <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
  </dataSources>
</version>

解决方法

我不确定这会对您的情况有所帮助,但首先使用实体​​框架代码,您可以使用Fluent API来配置属性.认的Code-First约定为具有相同名称,顺序和数据类型的属性创建列.您可以覆盖此约定,如下所示.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
        //Configure Column
        modelBuilder.Entity<Student>()
                    .Property(p => p.DateOfBirth)
                    .HasColumnName("dob")
                    .HasColumnorder(3)
                    .HasColumnType("datetime2");
  }

有关Fluent API的其他资源:

entityframeworktutorial

msdn.microsoft

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐