我正在将一个项目从 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 一起工作?干杯,
米克
最佳答案
Oracle 安装程序有时会忘记安装在 machine.config
中的数据库提供程序工厂。要解决此问题,需要将以下内容放入 app.config
或 machine.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 编号是奇数)。
关于.net - 使用 Oracle.DataAccess.Client 将 EntLib 4.1 升级到 5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2744410/