使用Oracle.DataAccess.Client将EntLib 4.1升级到5

时间:2010-04-30 12:18:22

标签: .net odp.net enterprise-library

我正在将项目从EntLib 4.1升级到EntLib 5.我已经浏览了迁移指南,更改了所有引用并更新了所有配置文件以指向EntLib 5.所有工作都正常接受Oracle数据库访问。使用配置文件:

<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <dataConfiguration defaultDatabase="prod">
    <providerMappings>
      <add databaseType="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase, Microsoft.Practices.EnterpriseLibrary.Data"
        name="Oracle.DataAccess.Client" />
    </providerMappings>
  </dataConfiguration>
  <connectionStrings>
    <add name="prod" connectionString="Data Source=dev;User Id=dev;Password=dev;"
      providerName="Oracle.DataAccess.Client" />
  </connectionStrings>
</configuration>

使用4.1对DatabaseFactory.CreateDatabase()的所有调用都失败了:

System.InvalidOperationException: The type Database cannot be constructed. You must configure the container to supply this value.

如果我将Oracle.DataAccess.Client替换为Microsoft System.Data.Oracleclient,那么它会再次起作用,但不会充满ODP.net的可爱性。有谁知道如何使用EntLib 5?

干杯,    MLK

3 个答案:

答案 0 :(得分:5)

它确定Oracle安装程序有时会忘记machine.config中安装的数据库提供程序工厂。要解决此问题,需要在app.configmachine.condig中添加以下内容。

<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client"
description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>

我认为在EntLib4中工作的是EntLib4使用以前版本的Oracle客户端(我认为是10.2.0.1。Oracle编号很奇怪)。

答案 1 :(得分:1)

使用此link中显示的配置。

或者,从相同链接的帖子末尾找到样本中的App.config。

答案 2 :(得分:0)

将ODP.NET 11g用于框架4。