微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在将项目从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编号很奇怪).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐