dotnetcore / sharding-core

high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案,具有零依赖、零学习成本、零业务代码入侵
https://xuejmnet.github.io/sharding-core-doc/
Apache License 2.0
1.17k stars 171 forks source link

使用已经存在的分表查询出现表不存在 #248

Closed henrydingchina closed 1 year ago

henrydingchina commented 1 year ago

当我的库里有2022-1月到2023-06月的表,但是我重写了GetBegTime方法返回2020-1月的时候,查询数据出现表不存在的错误,有什么方法可以避免出现这个问题,查询的时候以当前数据库中最小的表开始

xuejmnet commented 1 year ago

那你是否应该把begintime改成数据库表的最小那个月份呢既然你说有那么要不就把表补齐要么就以实际为准

xuejmnet commented 1 year ago

或者你参考源码案例autoifpresent,里面有如何获取现有数据库表名你自己重写gettails从数据库获取也可以

henrydingchina commented 1 year ago

谢谢你的回答,我目前的做法是在GetBegintime方法中用原始sql获取到当前分表中时间最小的表名,然后把这个表名的时间部分作为开始时间,测试后是可行的。

xuejmnet commented 1 year ago

@henrydingchina 但是这样做的效率是很低的,所以框架默认是通过推算来实现的,因为最小表是永远都不变的,就是begintime没必要去查询数据库

henrydingchina commented 1 year ago

主要原因是因为表不是由我这边去创建和维护的,我只做查询,只有被动去兼容别人的表结构

xuejmnet commented 1 year ago

那他改了你程序不是也要重新启动

henrydingchina commented 1 year ago

首次部署的时候需要,后面最小的表就固定了,只会向前去创建表,现在就是这套程序都是新部署的,之前给的都是我程序写死的一个默认的时间,导致出现这个表不存在的问题,所以我就想程序自己去获取这个时间就没哟这个问题了。或者有什么更好的方式

xuejmnet commented 1 year ago

那就是这种方式最好了起来查一次后续反正也不查了动态确实没办法就靠ado.net原生sql支持就好了

henrydingchina commented 1 year ago

嗯嗯,感谢回答