日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EF Core 实现读写分离的最佳方案

發(fā)布時(shí)間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EF Core 实现读写分离的最佳方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

公司之前使用Ado.net和Dapper進(jìn)行數(shù)據(jù)訪問(wèn)層的操作, 進(jìn)行讀寫(xiě)分離也比較簡(jiǎn)單, 只要使用對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接字符串即可. 而最近要遷移到新系統(tǒng)中,新系統(tǒng)使用.net core和EF Core進(jìn)行數(shù)據(jù)訪問(wèn). 所以趁著國(guó)慶假期拿出一兩天時(shí)間研究了一下如何EF Core進(jìn)行讀寫(xiě)分離.

思路

根據(jù)園子里的Jeffcky大神的博客, 參考

最簡(jiǎn)單的思路就是使用手動(dòng)切換EF Core上下文的連接, 即context.Database.GetDbConnection().ConnectionString = "xxx", 但必須要先創(chuàng)建上下文, 再關(guān)閉之前的連接, 才能進(jìn)行切換

上面的兩種方式都是從切換數(shù)據(jù)庫(kù)連接入手,但是頻繁的切換數(shù)據(jù)庫(kù)連接勢(shì)必會(huì)對(duì)性能造成影響. 我認(rèn)為最理想的方式是要避免數(shù)據(jù)庫(kù)連接的切換, 且能夠適應(yīng)多DbContext的情況, 在創(chuàng)建上下文實(shí)例時(shí),就指定好是訪問(wèn)主庫(kù)還是從庫(kù), 而不是在后期再進(jìn)行數(shù)據(jù)庫(kù)切換. 因此, 在上下文實(shí)例化時(shí),就傳入相應(yīng)的數(shù)據(jù)庫(kù)連接字符串, 這樣一來(lái)DbContext的創(chuàng)建就需要交由我們自己來(lái)進(jìn)行, 就不是由DI容器進(jìn)行創(chuàng)建了. 同時(shí)倉(cāng)儲(chǔ)應(yīng)該區(qū)分為只讀和可讀可寫(xiě)兩種,以防止其他人對(duì)從庫(kù)進(jìn)行寫(xiě)操作.

實(shí)現(xiàn)

IReadOnlyRepository接口是只讀倉(cāng)儲(chǔ)接口,提供查詢相關(guān)方法,IRepository接口是可讀可寫(xiě)倉(cāng)儲(chǔ)接口,提供增刪查改等方法, 接口的實(shí)現(xiàn)就那些東西這里就省略了.

RepositoryFactory提供倉(cāng)儲(chǔ)對(duì)象的實(shí)例化

IDbProvider 接口, 根據(jù)上下文類(lèi)型和配置文件中的數(shù)據(jù)庫(kù)連接字符串名稱創(chuàng)建IUnitOfWork, 在DI中的生命周期是Scoped,在銷(xiāo)毀的同時(shí)會(huì)銷(xiāo)毀數(shù)據(jù)庫(kù)上下文對(duì)象, 下面是它的實(shí)現(xiàn), 為了提高性能使用了Expression來(lái)代替反射.

總結(jié)

本文給出的解決方案適用于系統(tǒng)中存在多個(gè)不同的上下文,能夠適應(yīng)復(fù)雜的業(yè)務(wù)場(chǎng)景.但對(duì)已有代碼的侵入性比較大,不知道有沒(méi)有更好的方案,歡迎一起探討.

原文鏈接:https://www.cnblogs.com/KiraYoshikage/p/11628781.html


.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?

總結(jié)

以上是生活随笔為你收集整理的EF Core 实现读写分离的最佳方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。