2010-04-30 109 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。