当前位置:Gxlcms > 数据库问题 > Oracle EF5升级EF6

Oracle EF5升级EF6

时间:2021-07-01 10:21:17 帮助过:6人阅读

【配置系统环境】

按照官方文档的指引,下载安装EF6插件、Oracle EF Visual Studio插件,详情如下:

https://msdn.microsoft.com/en-us/data/dn469466
https://msdn.microsoft.com/en-us/data/jj730568
http://www.oracle.com/technetwork/topics/dotnet/downloads/install121021-2389380.html

 

【配置工程环境】

Web.config 中configuration节点下添加如下数据库提供程序:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework" />
    </providers>
  </entityFramework>

编译成功,运行会发现一大堆的类型不匹配的错误。

如果是Database First的,重新生成数据模型,会发现Model的数据类型变了,EF6相对于EF5的数据类型更加严格,比如:

EF5 NUMBER(3) short

EF6 NUMBER(3) Byte

这在某些情况下是不能满足我们的需求的,只要在App.config和Web.config中configuration节点下添加下面的配置就可以了。

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

 

看到上面的配置,我们是不是可以把Number(1) 配置成Bool呢?根据需要吧。

 

【oracle ef 数据库读写分离】

我升级到EF6就是为了读写分离,EF6增加了DbCommandInterceptor过滤器,通过过滤器我们可以记录执行的脚本,更可以做自动读写分离,相关请参考两位牛人的博客。

1. http://www.cnblogs.com/lori/p/4208974.html

2. http://www.cnblogs.com/cjw0511/p/4391092.html

关于用哪个,看个人需求了,两种基本差不多。

第一种在每次读的时候创建新的连接,所以在多次读的时候相当于多次连接。

第二种在读的时候把连接转到读的,写的时候把连接转到写的,事务开始时转写的,不过目前事务处理上还有点bug

不管是哪种方案,如果在一次业务处理中,既要读又要写,建议创建两个数据库实例,避免全走主库或者导致读写交替关闭打开。

Oracle EF5升级EF6

标签:

人气教程排行