我正在将项目从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.
如果我用Microsoft System.Data.Oracleclient替换Oracle.DataAccess.Client它会再次起作用,但是不满足于ODP.net的可爱性.有谁知道如何使用EntLib 5?
干杯,
MLK
解决方法
它会导致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,PublicKeyToken=89b483f429c47342" /> </DbProviderFactories> </system.data>
我认为在EntLib4中工作的是EntLib4使用以前版本的Oracle客户端(我认为是10.2.0.1.Oracle编号很奇怪).