码迷,mamicode.com
首页 > 数据库 > 详细

efcore 跨表查询,实现一个接口内查询两个不同数据库里各自的表数据

时间:2020-07-06 22:46:23      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:ant   dba   额外   actor   cdn   不能   info   一个数据库   ros   

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

技术图片

 

 技术图片

 

efcore 跨表查询,实现一个接口内查询两个不同数据库里各自的表数据

标签:ant   dba   额外   actor   cdn   不能   info   一个数据库   ros   

原文地址:https://www.cnblogs.com/clsl/p/13258058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!