我正试图将我的。net项目切换到管理oracle,以使部署更容易。然而,我在测试Win Server 2013环境中得到以下错误:
无法确定类型为'Oracle.ManagedDataAccess.Client.OracleConnection'的连接的提供者名称。
我已经走过的步骤:
- 删除所有Oracle。解决方案 中的DataAccess dll和引用
- 在NuGet包管理器 中增加了Oracle Data Provider for .NET (ODP.NET) Managed Driver
- 将所有
Imports Oracle.DataAccess
语句切换到Imports Oracle.ManagedDataAccess
我没有得到任何构建错误,项目在本地运行良好。然而,当部署到测试环境时,我得到了这个错误。测试环境是Windows Server 2012,并且安装了Oracle 11.2.0客户端工具。
这是我的连接创建代码:
Public Sub New()
MyBase.New(
New OracleConnection(
ConfigurationManager.ConnectionStrings("Entities").ConnectionString),
True)
End Sub
以下是我尝试过的3种不同风格的连接配置(两者都在本地工作,但在测试环境中产生相同的问题)
(格式化为可见性)
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
providerName="Oracle.ManagedDataAccess.Client" />
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
providerName="Oracle.DataAccess.Client" />
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
/>
任何帮助都将非常感激!
手动下载方法
感谢@Christian Shay指出Managed ODAC的NuGet版本不是由Oracle编写的
在Visual Studio 2012中使用实体框架管理Oracle数据访问。NET 4.5):
-
下拉实体框架5.0.0.0
Install-Package EntityFramework -Version 5.0.0
-
下载最新的Oracle Data Access Components (ODAC)
-
手动引用
Oracle.ManagedDataAccess.dll
-
将本节添加到配置文件
<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.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
然后照常进行。目前看来,Entity Framework 6不支持Oracle。ManagedDataAccess,所以有必要运行版本5。
还请记住,如果您使用的是Visual Studio 2010或更早版本,目标是。net 4, NuGet将拉下EF5,但请使用4。x程序集。我还没有在。net 4的VS2010上测试过这个
非官方NuGet方法
在Visual Studio 2012中使用实体框架管理Oracle数据访问。NET 4.5):
-
下拉实体框架5.0.0.0
Install-Package EntityFramework -Version 5.0.0
-
下拉Oracle Data Provider for .NET (ODP.NET) Managed Driver
Install-Package odp.net.managed
-
将本节添加到配置文件
<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.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
然后照常进行。目前看来,Entity Framework 6不支持Oracle。ManagedDataAccess,所以有必要运行版本5。
还请记住,如果您使用的是Visual Studio 2010或更早版本,目标是。net 4, NuGet将拉下EF5,但请使用4。x程序集。我还没有在。net 4的VS2010上测试过这个