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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

發布時間:2023/12/4 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EntityFramework Core进行读写分离最佳实践方式,了解一下(二)? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫過上一篇關于EF Core中讀寫分離最佳實踐方式后,雖然在一定程度上改善了問題,但是在評論中有的指出更換到從數據庫。


那么接下來要進行插入此時又要切換到主數據庫,同時有的指出是否可以進行底層無感知操作,這確實是個問題,本文繼續進行引路,進一步改善評論中問題的指出,至于實現更復雜的邏輯可自行實現。


在EF 6.x中我們知道有IDbCommandInterceptor接口,我們可對執行的SQL語句進行攔截,從而可自定義實現我們想要的需求。


雖然在EF Core中卻沒有攔截器特性的實現,但是針對此特性的實現DiagnosticSource記錄跟蹤類來實現等效于攔截器的實現,當前DiagnosticSource使用文檔尚未完善,估計還得等待一段時間,接下來我們來看看如何實現。


在DiagnosticSource包中有DiagnosticListener類,我們通過此類來跟蹤記錄,如果執行的EF Core包,那么我們將利用DiagnosticListener進行訂閱,訂閱到之后我們拿到跟蹤命令,從而實現無感知更換數據庫,代碼如下:


這里存在一個問題,上述 command.CommandText.Contains("@@ROWCOUNT") 代碼,因為在進行添加操作時,會返回主鍵,那么此時會進行查詢,所以暫時沒有更好的方式是確認主-從數據庫。


上述 DbLoggerCategory.Name 也就是 Microsoft.EntityFrameworkCore ,通過監控的包是Microsoft.EntityFrameworkCore,則進行訂閱,最后我們在startup中進行注冊該監聽類。

接下來我們通過動態圖來看看最終實際效果,主-從復制依然是通過SQL Server發布-訂閱的方式來同步數據。


在控制器中,我們只利用demo1上下文來添加和查詢數據,當查詢時更換到從數據庫,此時已是無感知(請見上一篇),如下:



本文只是在上一篇的基礎上進一步改善了讀寫分離的操作,通過跟蹤記錄從底層出發來完善讀寫分離操作,我們可拿到底層實現的命令以及其他和EF 6.x中利用攔截器等效,至于更加復雜的邏輯可自行實現。

總結

以上是生活随笔為你收集整理的EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。