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

本文围绕EFCore跨库查询需求展开,研究了colder框架文档的分库实现,指出其只能满足一个业务层构造指定的唯一数据库访问接口的缺陷。还介绍了两种实现方式,一是DbAccessor实现使用多数据库,二是推荐的DbFactory.GetDbAccessor()实现。

摘要生成于 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

文章来源: www.cnblogs.com,作者:那一片蓝海,版权归原作者所有,如需转载,请联系作者。

原文链接:https://www.cnblogs.com/clsl/p/13258058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值