ABP动态配置数据库连接字符串 Oracle11g数据库

ABP动态配置数据库连接 Oracle11g数据库

ABP的仓储关于数据库连接字符串的配置是从web.config(app.config)的connectionStrings读取的。

我想实现的功能是使用Consul的KV加密存储Oracle数据库的连接字符串,在ABP的应用层动态获取。

采用的ABP版本4.7,.Net Famework 4.61,Oracle 数据库11.2,vs2019,Win7。

尝试过 [DbConfigurationType(typeof(DapperDbContextConfiguration3))]依赖,使用DbConfiguration的SetProviderFactory,SetProviderServices,结果失败。提示需要连接SQLServer数据库,然后从DataProvider入手,采用IConnectionStringResolver或DefaultConnectionStringResolver还是失败。

解决方案:

ABP提供了Configuration.DefaultNameOrConnectionString来动态配置连接字符串,这个很容易实现运行时配置。

在应用层模块中,任意模块中都可以。

public override void PreInitialize()
        {

          //或者使用Consul的方式从配置中心获取
          Configuration.DefaultNameOrConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.19.19.188)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dacong)));User ID=dacong;[email protected];" 

}

扫描二维码关注公众号,回复: 10635437 查看本文章

关键还是要与*.config文件进行配合,默认生成的defaultConnectionFactory是SQL Server数据库的,即使你改对了Configuration.DefaultNameOrConnectionString,运行时默认还是采用工厂方法创建SQL server的连接,注定失败。需要把defaultConnectionFactory换成Oracle的。

正确的配置如下

  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>
  <connectionStrings>
  </connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    <providers>
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <oracle.manageddataaccess.client>
    <version number="*">

<edmMappings>
        <edmMapping dataType="number">
          <add name="bool" precision="1" />
          <add name="byte" precision="3" />
          <add name="int16" precision="5" />
          <add name="int32" precision="10" />
          <add name="int64" precision="19" />
        </edmMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>

发布了181 篇原创文章 · 获赞 35 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/dacong/article/details/97610970