Oracle 与2个月前刚提供对EF6的支持。以前只支持到EF5。EF6有很多有用的功能 值得升级。这里介绍下如何支持Oracle
一.Oracle 对.net支持的一些基础知识了解介绍。
1.早年的时候,微软自己做的有System.Data.OracleClient。 现在已经成了过期类了。性能等都不是很好。
2.Oracle 官方出的odp.net Oracle.DataAccess.dll(非托管版本) 还要分32/64位。而且很麻烦的是 部署的时候 需要装客户端环境。非常繁琐。
3.Oracle 官方近年新出的 Oracle.ManagedDataAccess.dll 这个非常给力 不再区分32/64位了。 而且不需要客户端再安装东西了。性能也得到了提高。不管是用ado.net或者其他ORM框架
都建议使用此版本dll。这次我们的EF6 也会依据此dll进行开发。
官方下载地址是这个 一定要去官方下载最新的 才能支持EF6 我从nuget上下的版本较低 不支持。。
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html (当时下载的版本为4.121.2.0)
下载好后 从这个目录下odp.net\managed\common 拿出2最关键的dll
Oracle.ManagedDataAccess.dll 和Oracle.ManagedDataAccess.EntityFramework.dll
加入如下代码:
<configSections> section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!--<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler,Oracle.ManagedDataAccess,Version=4.121.2.0,PublicKeyToken=89b483f429c47342" />--> </> entityFrameworkdefaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory,Oracle.ManagedDataAccess.EntityFramework,Version=6.121.2.0,PublicKeyToken=89b483f429c47342" providers> provider invariantName="Oracle.ManagedDataAccess.Client"="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices,255); line-height:1.5!important">/> > system.dataDbProviderFactoriesremove invariant="Oracle.ManagedDataAccess.Client" /> add ="ODP.NET,Managed Driver" invariant description="Oracle Data Provider for .NET,0); line-height:1.5!important"> type="Oracle.ManagedDataAccess.Client.OracleClientFactory,255); line-height:1.5!important">>
连接字符串如下记得提供下providerName 为Oracle.ManagedDataAccess.Client
下的 machine.config (64位的话 路径是Framework64,最好都检测下)
machine.config 可以理解为webconfig的父类 所以我们需要检查下里面的内容 是否有
="oracle.manageddataaccess.client"="OracleInternal.Common.ODPMSectionHandler,Version=4.121.1.0,255); line-height:1.5!important">/>
这样的内容 如果有 修改版本号Version 为当前Oracle.ManagedDataAccess.Client版本。
三.注意事项
1.访问时提示表不存在,有可能权限不够。需要设置默认的Schema 需要在OnModelCreating设置
modelBuilder.HasDefaultSchema(“Schema名”);
2.oracle 的配置是否配置了使用ora方式来访问。 建议先不使用ora方式,有可能是这个方式访问导致的问题。
3.oracle 访问的问题 一定多去官网看下。
推荐几篇
http://docs.oracle.com/cd/E56485_01/win.121/e55744/toc.htm
http://docs.oracle.com/cd/E56485_01/win.121/e55744/entityMigrate.htm#BABEHEFE