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

     

  • 相关阅读:
    linux系统中只删除所有文件或只删除所有目录
    redhat7使用nmtui配置网络
    xshell,winscp,xftp无法用root用户登录
    windows无法访问指定设备路径或文件,你可能没有权限
    挂起/释放执行sap Job
    ALE,RFC和CPIC之间的关系
    CALL RFC synchronize and asychronize Examples
    关于BAPI
    ABAP调用SAP的单位转换函数进行单位转换
    BASIS--Client 锁定和解锁
  • 原文地址:https://www.cnblogs.com/clsl/p/13258058.html
Copyright © 2020-2023  润新知