场景描述:本机是安装了Oracle12。连接Oracle数据库,需要引用两个DLL,分别是:Oracle.ManagedDataAccess.dll和Oracle.ManagedDataAccess.EntityFramework.dll,我在vs2013和vs2015里面的Nuget上,安装了这两个包,在运行的时候,一直报:未能在程序集Oracle.ManagedDataAccess中找到OracleInternal.Common.ConfigClass类,一直郁闷啊;后来发现我本机有最新的Oracle啊,于是在Oracle的安装目录中,查找这两个程序集,还果然找到了:再安装目录D:\software\oracle\product\12.1.0\dbhome_1\ODP.NET\managed\common下。如下图:
把项目中在nuget上引用的2个dll,全部换成这里面的dll。然后再次运行项目,如下图:
数据库中的表,也已经自动生成了,如下图:
关于如何写代码就不说了,关键是配置文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<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, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="Default" connectionString="DATA SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=jucheap)));PASSWORD=123;PERSIST SECURITY INFO=True;USER ID=jucheap; enlist=dynamic;" providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="JUCHEAP" descriptor="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=jucheap)))" />
</dataSources>
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="3" />
<add name="int16" precision="5" />
<add name="int32" precision="10" />
<add name="int64" precision="19" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
</configuration>
为了方便大家学些,另附上Demo程序:http://www.jucheap.com/demo/EF.Oracle.rar