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];" 

}

 

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

正确的配置如下

 
   


   

 
 
 


   
   
     
   

 

 
   
     
     
   

 

 
   


       
         
         
         
         
         
       

     

   
 

 

你可能感兴趣的:(C#,ABP)