2010-04-30 66 views
4

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

<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. 

如果我与微软System.Data.Oracleclient这一切再次工作更换Oracle.DataAccess.Client,但并未充满ODP的。净可爱。有谁知道如何让它与EntLib 5一起工作?

干杯, MLK

回答

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我认为甲骨文编号为奇数)。

1

使用ODP.NET11克使用配置显示在此link

或者,从相同链接的帖子末尾找到的示例中查看App.config。