企業應用架構研究系列十三:整合EFCore&Dapper 通用ORM框架EFDapper

溫森特發表於2023-01-18

  EntityFrameworkCore是微軟官網提供的ORM框架,是輕量化、可擴充套件、開源和跨平臺的資料訪問技術框架,但是在.Net 開發圈的評論卻褒貶不一。很多人認為EFCore 執行的效能比較差,很多複雜的查詢場景很難實現,也有很多人認為,EFCore 開發簡單,在中小型專案中,能夠快速的實現業務邏輯。

  

    我個人認為,EFCore一直在不斷的升級,社群反饋的問題也在逐一的去努力解決,EFCore應該是一個可以信任,可以在專案中放心使用的框架。特別是EFCore7.0出來後,提供的對JSON的支援,讓我更加確信EFCore是一個優秀的ORM框架。我對其的一些優秀的功能進行總結:(1)首先,EFCore 的物件模型管理還是非常嚴謹,基本上將物件的關係和資料庫的表的關係管理的非常到位,保證資料的純淨,並且可以進行連帶的統一移除,這點是非常不錯的;(2)其次,EFCore 提供了資料的變更管理,透過Migration工具將物件的變更和資料庫的變更高效的進行了自動化的管理,特別是在產品軟體開發過程中,提供了一鍵式部署提供了非常方便的支援。(3)EFCore 的對Linq 的支援力度是非常大的,能夠快速的進行應用程式的開發。(4)EFCore 的後續版本對非同步操作和效能提升方面,也做了很大的升級,(5)特別是EFCore7 版本支援了JSON功能,這個是對一些靈活的動態屬性或者子表可以簡化了資料庫的變更,更好的適應非結構化資料儲存。(6)種子資料的管理,方便產品型軟體在程式首次啟動時候,初始化一些原始的配置資料。…… 其實還有很多優秀的功能,我本次也不在熬述。

  但EFCore 目前在一些查詢和特殊的SQL語句的執行過程中,支援的不是特別好,效能也不是特別優秀。這個時候,我們需要引入另外一個ORM外掛,Dapper,號稱效能之王的ORM框架,在效能方面的確是非常非常優秀,功能也是很強大,支援的生態圈也是很豐富的。而且在.Net 開發圈內是非常受歡迎的。在這裡,也不在介紹Dapper的優秀功能,可以參考官網:https://dapper-tutorial.net ,官網說明的非常清楚而且很詳細。

  當在進行全新軟體架構選型資料處理層外掛的時候,很讓我頭疼,是選擇EFCore 還是Dapper 呢?經過一番折騰,我覺得兩個外掛其實是可以互相彌補彼此不足,發揚外掛彼此的優秀能力,將兩個外掛高效融合在一起。基於這個思路,我開發了一個新的結合體資料訪問層框架EFDapper,本著最簡設計思路,在DbContext上面進行功能繫結,如下圖,我們就可以將Dapper的 高效的查詢功能和EFCore 進行了高效融合了。

  

   EFDapper 的使用是非常簡單,就是EFCore 的功能和Dapper 的功能的合體,透過EFCore 的DbContext 的上下文,獲取資料庫連線資訊,然後就可以擴充套件到Dapper 功能框架了,完美的結合了兩個資料訪問層框架。

   

  目前EFDapper 框架還沒有開發成熟,後續計劃在兩框架之間,可以開發一些優秀功能,也希望EFCore 和Dapper 框架越來越優秀。

 

相關文章