感谢您寻找
我编写了一个使用实体框架6的应用程序,Oracle数据提供商12c R3支持 。
我已安装此版本的ODP,但我无法使其正常工作。我尝试了configuration instructions,但是当我的代码试图访问任何Oracle实体时,我仍然会收到此错误:
0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'Oracle.DataAccess.Client'.
注意:我知道在这个主题上还有很多其他StackOverflow问题,但是大多数都是较旧的,并没有考虑到支持EF 6的新版ODP。 / p>
感谢任何帮助。
答案 0 :(得分:1)
我终于能够在EF6上使用ODP了。
我做了以下工作: -
首先安装ODAC 12c第3版,其中包括对实体框架6代码优先和代码优先迁移的支持; NuGet,.NET Framework 4.5.2;和ODP.NET,托管驱动程序XML DB。按照
http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html
将两个引用添加到我的项目引用中,它们是:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccess.EntityFramework.dll
通过在软件包管理器控制台中运行以下命令,使用NuGet安装EF6.1.1(可以通过Tools-> NuGet软件包管理器 - >软件包管理器控制台输入):
Install-Package EntityFramework -Version 6.1.1
修改web.config或web.config以使用Oracle.ManagedDataAccess,方法是添加Provider和有效的连接字符串,例如:
<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" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<entityFramework>
<contexts>
<context type="App.Context.Default, App.Context">
<databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" />
</context>
</contexts>
<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>
<connectionStrings>
<add name="Default" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=XE;USER ID=User" />
</connectionStrings>
将您的应用程序重建为x86,并开始使用EF6,您可以使用代码优先使用ADO.Net实体模型添加模型来检查它是否有效