Oracle Instant Client和Entity Framework在配置方面存在问题

我正在尝试学习并弄清楚是否可以将MVC,EF,ODAC 11.2.0.3应用程序部署到安装了先前版本的ODP.NET的服务器上。 我认为我可以使用Oracle Instant Client,而不是更新服务器ODP.NET(我不能)。

这可行吗?

1)我将这些dll添加到我的项目中以支持Instant Client

-Oracle.DataAccess.dll

-oci.dll

-ociw32.dll

-orannzsbb11.dll

-oraociei11.dll

-OraOps11w.dll

2)接下来我更新了dbProviderFactories的web.config

     

3)这个(afaik)是如何在bin rathre中使用Oracle dll而不是GAC

         

4)最后我的connectionString

     

这是我收到的错误无法找到请求的.Net Framework数据提供程序。 它可能没有安装。

我真的很感激这里的任何帮助。 我很新,有很多东西需要学习。 提前致谢。 干杯

在Web配置的元素中添加部分,以删除任何现有的Oracle提供程序。 (在之前)

从您的问题看来,您需要仅使用xcopy部署权限将更新部署到您的应用程序和新版本的ODP.net。

由于您的应用程序正在更改,因此您不应该需要程序集绑定更改或DbProviderFactories。 只需使用edmx等更新类库的csproj,即可获得对新ODP.net版本的引用,例如

  

如果您的tnsnames.ora出现问题,则必须执行以下操作之一:a)添加系统环境变量TNS_ADMIN以指向tnsnames.ora的目录,或b)将连接字符串更改为某些内容基于:

 Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword; 

c)看看你是否可以在其他地方放置tnsnames.ora的副本。

这是我的Xcopy解决方案。

我发布了它

https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181

同样。

但我想我可以在这里发布我的xml而没有格式化问题。

Nuget“packages.config”

          

的app.config

(注意下面的标签。这可能需要也可能不需要,但我认为最好清除它们,因为你不知道machine.config文件中可能包含的内容)

    

我正在使用x64 Windows 7计算机进行开发。

我下载了:ODAC1120320Xcopy_32bit.zip(来自oracle.com)

哪一个是:

ODAC 11.2第5版(11.2.0.3.20)下载XCopy版本[2012年9月11日发布]

我解压缩了这个zip文件。

我搜索并找出这些文件:

oci.dll Oracle.DataAccess.dll orannzsbb11.dll oraociei11.dll OraOps11w.dll

注意,当有2个同名文件时,我为我的3.5 Framework需要“bin \ 2.x \”或“odp.net20 \ bin”版本(我还没有4.0)。

我接受了这些文件,并将它们放在我的.sln文件所在的子文件夹中。

 .\MySolution.sln .\MyConsoleApplicationFolder\MyConsoleApp.csproj .\ThirdPartyReferences\ .\ThirdPartyReferences\Oracle\ 

我把上面的所有文件都放在了

 .\ThirdPartyReferences\Oracle\ 

我使用“添加引用”将对Oracle.DataAccess.dll的引用添加到“MyConsoleApp.csproj”csharp项目中。 (这意味着浏览到“.. \ ThirdPartyReferences \ Oracle \”当然)

我使用“Post Build Event”来复制“额外”(又名“附件”)文件

我的post构建活动中的行是:

 copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oci.dll $(TargetDir)*.* copy $(ProjectDir)..\ThirdPartyReferences\Oracle\orannzsbb11.dll $(TargetDir)*.* copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oraociei11.dll $(TargetDir)*.* copy $(ProjectDir)..\ThirdPartyReferences\Oracle\OraOps11w.dll $(TargetDir)*.* 

请注意,我的post构建事件会从上面的URL说明中替换“Copy if Newer”。

当我运行我的项目……..我有一些丢失的DLL错误。

注意:在您调用EnterpriseLibrary.Data对象的程序集中……您将获得“无法找到Microsoft.Practices.SomethingSomething命名空间。 只需继续添加对这些dll的引用(上面的package.config将下拉),直到错误消失为止。

像这里是特定的一个:

 "Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified." 

所以(在运行Nuget之后,当然要下载所有文件)我去了并添加了一个引用:

\包\ CommonServiceLocator.1.0 \ LIB \ NET35 \ Microsoft.Practices.ServiceLocation.dll

这解决了问题。

我的csharp代码:(注意“select *”仅用于演示目的)

 /* using System; using System.Data; using System.Data.Common; using Microsoft.Practices.EnterpriseLibrary.Data; */ public IDataReader EmployeesGetAll() { IDataReader returnReader = null; try { Database db = DatabaseFactory.CreateDatabase(); DbCommand dbc = db.GetSqlStringCommand("SELECT * FROM ( SELECT * FROM TEMPLOYEE ) WHERE ROWNUM <= 25"); returnReader = db.ExecuteReader(dbc); return returnReader; } finally { } } 

它奏效了。

谢谢:

https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181

我认为这使得ODP.NET成为“xcopy”部署。

我仍然需要在干净的机器上进行测试才能确定。

但它结束了一天..............

================

附加信息:

以上所有内容都是正确的。 但是,我发了一个警告。 我正在使用“控制台应用程序”来测试我的代码。

当您向Visual Studio添加新的控制台应用程序时,它默认为x86。

如下所示:

http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os-aspx

编辑:(更新链接)

http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os

因此,当我将所有配置和代码和内容放在一个真实的项目中(在x64位机器上设置为“Any CPU”)时......我所做的一切都停止了工作。 <

稍微调整一下........我在oracle.com上找到了这个文件ODAC1120320Xcopy_x64.zip然后我重复了上面所做的一切,但是搜索了这个x64 zip文件的解压缩文件。

一切正常。

但是,带有控制台应用程序的“x86”默认设置让我陷入了循环。

通过Instant Client部署ODP.NET时,我收到了同样的错误(未找到数据提供程序)。 我唯一需要做的就是将以下内容添加到我的exe.config文件中(在标记内)