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

支援Pool 和 Factory #278

Open ChengYen-Tang opened 1 month ago

ChengYen-Tang commented 1 month ago

能不能支援Pool 和 Factory提升資源和連線效率 AddDbContextPool AddDbContextFactory AddPooledDbContextFactory

xuejmnet commented 1 month ago

@ChengYen-Tang 如果你可以找到重写dbcontext的reset重置方法那么是可以的,但是目前我没找到这个办法所以没办法支持,因为pool在使用后会调用reset将状态之类的重置我需要在这个时候将多余的分片dbcontext清理掉dispose掉但是目前没找到解决方案因为这个方法不是public或者protected的

ChengYen-Tang commented 1 month ago

你是說這段嗎? https://github.com/dotnet/efcore/blob/release/7.0/src/EFCore/DbContext.cs#L979-L1039

xuejmnet commented 1 month ago

@ChengYen-Tang 是的

ChengYen-Tang commented 1 month ago

不過,我有一個疑問,如果要清理多餘的分片dbcontext,為什麼是實現在ResetState,而不是在dispose呢?

xuejmnet commented 1 month ago

@ChengYen-Tang 因为pool模式下是将dbcontext存到一个容器里面,然后调用租借返还两个方法将dbcontext给用户使用,而返还的时候会对其进行重置而不是dispose,因为dispose后将无法复用

xuejmnet commented 1 month ago

@ChengYen-Tang https://www.cnblogs.com/CreateMyself/p/13945144.html 可以尝试看看这个博客

image