efcore 跨表查詢,實現一個接口內查詢兩個不一樣數據庫裏各自的表數據

  最近有efcore跨庫查詢的需求,研究了下colder框架裏文檔的分庫實現,發現並不能徹底實現一個接口下的跨庫查詢請求,只能知足一個業務層構造指定的惟一一個數據庫訪問接口。數據庫

先說下文檔是怎麼實現的json

DbAccessor實現使用多數據庫app

默認框架會自動注入IDbAccessor做爲數據庫訪問接口,在須要的時候注入便可,若系統須要操做多個數據庫,那麼須要定義額外的接口繼承IDbAccessor而後配置注入進去便可訪問框架

  • 先定義新的接口IMyDbAccessor spa

  • 而後配置數據庫類型和鏈接字符串 3d

  • 使用IMyDbAccessor 日誌

這樣就能夠在任何地方注入並使用IMyDbAccessor,更多數據庫同理配置便可code

--上面的缺陷在於BaseBussiness 中只能構造一個IMyDbAccessor,也就是說只能注入和使用一個數據庫的數據訪問接口。blog

 

DbFactory.GetDbAccessor()實現 (推薦)繼承

不須要像上面那樣事先依賴注入,再寫本身的IMyDbAccessor接口繼承IDbAccessor。

直接使用EFCore.Sharding中的DbFactory數據工廠

using EFCore.Sharding;
using Microsoft.Extensions.Logging;

namespace EFCore.Sharding
{
    //
    // 摘要:
    //     數據庫工廠
    public static class DbFactory
    {
        //
        // 摘要:
        //     根據配置文件獲取數據庫類型,並返回對應的工廠接口
        //
        // 參數:
        //   conString:
        //     完整數據庫連接字符串
        //
        //   dbType:
        //     數據庫類型
        //
        //   loggerFactory:
        //     日誌工廠
        public static IDbAccessor GetDbAccessor(string conString, DatabaseType dbType, ILoggerFactory loggerFactory = null);
        //
        // 摘要:
        //     獲取ShardingDbAccessor
        //
        // 參數:
        //   absDbName:
        //     抽象數據庫
        //
        // 返回結果:
        //     ShardingDbAccessor
        public static IShardingDbAccessor GetShardingDbAccessor(string absDbName = "BaseDb");
    }
}

 

 

 

appsetting.json代碼

 

 

相關文章
相關標籤/搜索