我试图将我的.NET项目切换到manage oracle以使部署更容易。但是,我在测试Win Server 2013环境中收到以下错误:
无法确定类型' Oracle.ManagedDataAccess.Client.OracleConnection'的连接的提供商名称。
到目前为止我采取的措施:
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=_____;"
/>
非常感谢任何帮助!
答案 0 :(得分:7)
手动下载方法
感谢@Christian Shay指出Managed ODAC的NuGet版本不是由Oracle创作的
在Visual Studio 2012(.NET 4.5)中使用托管Oracle数据访问和实体框架:
Install-Package EntityFramework -Version 5.0.0
手动参考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上测试过这个。
答案 1 :(得分:5)
非官方NuGet方法
在Visual Studio 2012(.NET 4.5)中使用托管Oracle数据访问和实体框架:
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上测试过这个。