Open xuejmnet opened 3 years ago
重置所有的dbcontext需要的话clear
其他的dbcontext直接dispose
啥时候支持啊?
@pengweiqhca 你是一定要dbcontextpool吗,scope和transient大部分场景应该够了
因为客户端分片会开启多个链接其实dbcontextpool没啥意义了
不是必须,只是切换到sharding-core时报错了,然后发现没有支持且作为增强功能待实现,故问问
@pengweiqhca 因为要实现iresetstateservice让其在分片后的dbcontext可以重置掉,但是之前看了代码没什么思路,然后用的人大部分都是scope或者是abp,abp是transient所以就渐渐淡忘了..
@pengweiqhca 当然还有一个原因是没有什么必要,因为dbcontextpool是针对dbcontext的限制,而不是dbconnection,因为之前dbcontext和dbconnection的关系式一对一所以可以看成连接池,但是现在因为分片的原因dbcontext和dbconnection的关系式一对多了,所以就导致了dbcontextpool的设置毫无意义除了new dbcontext的次数变少了好像没有任何好处
我覺得還是要實現dbcontextpool呢 因為在高併發的情況下,保留連線比不斷建立中斷的效能還要來的好。
另外希望您實現 PooledDbContextFactory,在 Worker Service的情境下,常常會有一個 class 下面多個 function 需要使用 dbcontext,如果 class 注入 dbcontext,所有 function 共用 dbcontext 會有幾個問題。
@ChengYen-Tang 可以实现,至于workservice下通过serviceprovider的createscope来使用会比较好
我的方案都有切專案來解耦合。所以,操作DB的專案無法注入 serviceprovider
@ChengYen-Tang 不应该所有用到依赖注入的地方都可以通过注入serviceprovider,是在不行就用静态的serviceprovider.Createscope
我的意思是,您說將DBcontextFactory改用serviceprovider的地方,他在其它專案中,是沒辦法注入serviceprovider的。然後這個專案的某一層開始生命週期是 Singleton,所以被注入的元件只能依賴DBcontextFactory來create dbcontext
xuejmnet @.***> 於 2022年10月8日 週六 下午2:08 寫道:
@ChengYen-Tang https://github.com/ChengYen-Tang 不应该所有用到依赖注入的地方都可以通过注入serviceprovider,是在不行就用静态的serviceprovider.Createscope
— Reply to this email directly, view it on GitHub https://github.com/dotnetcore/sharding-core/issues/40#issuecomment-1272238777, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHYHHRUEWV2YPOWWNK7A4ATWCEFVHANCNFSM5GBKBR2A . You are receiving this because you were mentioned.Message ID: @.***>
@ChengYen-Tang IServiceProvider的root节点也是Singleton的,所以能注入DBContextFatcory的地方IServicProvider都可以,所以我才说让你注入这个或者使用静态属性IServiceProvider
使用DBContextFatcory的專案只要安裝EF套件就好,Iserviceprovider是worker service的專案才能使用,不然我就必須額外安裝DI套件,但是我不想讓資料庫的專案跟DI直接耦合
xuejmnet @.***> 於 2022年10月8日 週六 下午4:25 寫道:
@ChengYen-Tang https://github.com/ChengYen-Tang IServiceProvider的root节点也是Singleton的,所以能注入DBContextFatcory的地方IServicProvider都可以,所以我才说让你注入这个或者使用静态属性IServiceProvider
— Reply to this email directly, view it on GitHub https://github.com/dotnetcore/sharding-core/issues/40#issuecomment-1272264119, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHYHHRWMKN6GL6ZBJSSDOBLWCEVXBANCNFSM5GBKBR2A . You are receiving this because you were mentioned.Message ID: @.***>
@ChengYen-Tang 但是efcore本身已经和Microsoft.Extensions.DependencyInjection.Abstractions
lib已经耦合了,不需要在安装了,efcore本身就是依赖于IServiceProvider
的不过没事我这边尽可能满足支持dbcontextpool
@xuejmnet 這是我的情境啦!! 不過可能有些情境是開發成套件,不會希望物件要依賴於IServiceProvider,但是又想解決我一開始提到的兩點問題
@ChengYen-Tang 可以实现,至于workservice下通过serviceprovider的createscope来使用会比较好
我覺得使用createscope不太好,我這邊的情境,程式剛啟動或爬資料時需要同步狀態,會密集的查詢,這樣導致密集觸發GC,
实现iresetstateservice支持dbcontextpool