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

本文档介绍了如何在EFCore中实现跨库查询,通过DbFactory类来动态获取不同的数据库访问接口,从而在一个接口下完成对多个数据库的查询操作。这种方法避免了预先依赖注入和自定义接口的限制,提高了代码的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有efcore跨库查询的需求,研究了下colder框架里文档的分库实现,发现并不能完全实现一个接口下的跨库查询请求,只能满足一个业务层构造指定的唯一一个数据库访问接口。

先说下文档是怎么实现的

DbAccessor实现使用多数据库

默认框架会自动注入IDbAccessor作为数据库访问接口,在需要的时候注入即可,若系统需要操作多个数据库,那么需要定义额外的接口继承IDbAccessor然后配置注入进去即可访问

先定义新的接口IMyDbAccessor

ad22d20a0e2114ea6f9865bceeeb72f2.png

然后配置数据库类型和连接字符串

2be923c6bf7dec45637311df85a0c8d7.png

使用IMyDbAccessor

51d8c1e0988912aed052246a81414cb5.png

这样就可以在任何地方注入并使用IMyDbAccessor,更多数据库同理配置即可

--上面的缺陷在于BaseBussiness 中只能构造一个IMyDbAccessor,也就是说只能注入和使用一个数据库的数据访问接口。

DbFactory.GetDbAccessor()实现 (推荐)

不需要像上面那样事先依赖注入,再写自己的IMyDbAccessor接口继承IDbAccessor。

直接使用EFCore.Sharding中的DbFactory数据工厂

usingEFCore.Sharding;usingMicrosoft.Extensions.Logging;namespaceEFCore.Sharding

{//

//摘要://数据库工厂

public static classDbFactory

{//

//摘要://根据配置文件获取数据库类型,并返回对应的工厂接口//

//参数://conString://完整数据库链接字符串//

//dbType://数据库类型//

//loggerFactory://日志工厂

public static IDbAccessor GetDbAccessor(string conString, DatabaseType dbType, ILoggerFactory loggerFactory = null);//

//摘要://获取ShardingDbAccessor//

//参数://absDbName://抽象数据库//

//返回结果://ShardingDbAccessor

public static IShardingDbAccessor GetShardingDbAccessor(string absDbName = "BaseDb");

}

}

32ad5a779dae6c42986d978b7a8f0da3.png

appsetting.json代码

8e7f74495b72ecc777dd3ef74056b6b6.png

5273743b9d43ef45b71a51844dda9734.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值