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代码

     

  • 相关阅读:
    RabbitMQ知识点整理2-相关概念介绍
    RabbitMQ知识点整理1-生产和消费消息
    Java自学-图形界面 Swing中的线程
    Java自学-图形界面 日期控件
    Java自学-图形界面 表格
    Java自学-图形界面 工具栏
    WebStorm 2020.2.3 破解(Mac,windows,Linux)
    消息队列的使用场景
    有关建立虚拟环境的总结
    性能测试-Locust分布式执行
  • 原文地址:https://www.cnblogs.com/clsl/p/13258058.html
Copyright © 2011-2022 走看看