efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料

那一片藍海發表於2020-07-06

  最近有efcore跨庫查詢的需求,研究了下colder框架裡文件的分庫實現,發現並不能完全實現一個介面下的跨庫查詢請求,只能滿足一個業務層構造指定的唯一一個資料庫訪問介面。

先說下文件是怎麼實現的

DbAccessor實現使用多資料庫

預設框架會自動注入IDbAccessor作為資料庫訪問介面,在需要的時候注入即可,若系統需要操作多個資料庫,那麼需要定義額外的介面繼承IDbAccessor然後配置注入進去即可訪問

  • 先定義新的介面IMyDbAccessor 

  • 然後配置資料庫型別和連線字串 

  • 使用IMyDbAccessor 

這樣就可以在任何地方注入並使用IMyDbAccessor,更多資料庫同理配置即可

--上面的缺陷在於BaseBussiness 中只能構造一個IMyDbAccessor,也就是說只能注入和使用一個資料庫的資料訪問介面。

 

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程式碼

 

 

 

相關文章