最近有efcore跨库查询的需求,研究了下colder框架里文档的分库实现,发现并不能彻底实现一个接口下的跨库查询请求,只能知足一个业务层构造指定的惟一一个数据库访问接口。数据库
先说下文档是怎么实现的json
DbAccessor实现使用多数据库app
默认框架会自动注入IDbAccessor做为数据库访问接口,在须要的时候注入便可,若系统须要操做多个数据库,那么须要定义额外的接口继承IDbAccessor而后配置注入进去便可访问框架
先定义新的接口IMyDbAccessor spa
而后配置数据库类型和链接字符串 3d
使用IMyDbAccessor 日志
这样就能够在任何地方注入并使用IMyDbAccessor,更多数据库同理配置便可code
--上面的缺陷在于BaseBussiness 中只能构造一个IMyDbAccessor,也就是说只能注入和使用一个数据库的数据访问接口。blog
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代码