zoukankan      html  css  js  c++  java
  • efcore 跨库查询,实现一个接口内查询两个不同数据库里各自的表数据

      最近有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代码

     

  • 相关阅读:
    shell文件包含
    shell输入/输出重定向
    shell流程控制
    shell echo命令(六)
    shell基本运算符(五)
    shell数组(四)
    shell传递参数-$的用法(三)
    SQL 注入 处理
    WPF 还未开始我就打算结束
    Java SDK 2.0
  • 原文地址:https://www.cnblogs.com/clsl/p/13258058.html
Copyright © 2011-2022 走看看