教你10分鐘對接人大金倉EF Core 6.x

前言

目前.NET Core中據我瞭解到除了官方的EF Core外,還用的比較多的ORM框架(恕我孤陋寡聞哈,可能還有別的)有FreeSql、SqlSugar(排名不分先後)。FreeSql和SqlSugar都已早早支持國產數據庫比如人大金倉、神通、達夢,要是項目要求支持適配國產數據庫中,同時項目若早已使用上如上兩種ORM框架,那並可以很愉快的玩耍了,要是使用EF Core就有點傷腦筋,只能自主寫一套適配

十分鐘對接人大進倉驅動

此文只是以最新版本作爲示例,任意版本都可快速適配完人大金倉,基於我大國產數據庫收費,當然就有技術支持,大可催官方出EF Core 5.x、6.x,當項目進行框架升級,但等不及官方出迭代版本,出完後,可能還需要噹噹小白鼠試驗一番,本文未嘗不是一條先行之道

 

通過官網僅提供V8 R6版本,所以下載其windows版本,最終可看到提供了對應不同版本的驅動

但是呢,EF Core版本僅爲2.2.4,要是EF Core爲3.1.x版本過高,當你調試時你會發現有異常,反編譯其dll,其實裏面有一部分方法並未實現,換句話說,在較高版本上底層EF Core做了實現,但2.2.4適配版本並未實現。我們用到的則是如下兩個dll,第一個驅動作爲程序集引用,另外一個則是適配EF Core

對EF Core還算有點熟悉,適配EF Core無非就三步走策略

 

1、基礎設施:Microsoft.EntityFrameworkCore

 

2、關聯映射:Microsoft.EntityFramework.Relational

 

3、數據遷移:Microsfot.EntityFramwork.Design

 

上面前兩步是必要條件,至於最後一步看項目是否用到遷移,沒用到可無需引入。講到這裏,你以爲我準備自主實現這一套嗎?不存在的,有捷徑不走爲何非得裝個b勒!到其底層借鑑於PS,於是乎我下載efcore.pg 6.0.1版本

1、根據自身需要:如上刪除沒必要的包,什麼測試項目啊,支持對日期轉換插件等等啊(實際只需要EFCore.PG)其結構與EF Core源碼一毛一樣

2、歸納演繹法:

人大金倉適配EF Core命名Kdbndp.EntityFrameworkCore.KingbaseES,是否找到等同規律!我們將Npgsql全局替換爲Kdbndp,同理將PostgreSQL全局替換爲KinbaseES

對於異常處理,PostgresException全局替換爲KingbaseException,系統數據庫pg_ 全局替換爲sys_(不替換也沒問題,主要用於數據庫表遷移,若用到遷移,就必須替換)。接下來則是將底層驅動Npgsql.dll替換爲Kdbndp.dll,比較正規放到驅動文件夾中

將EFCore.PG項目文件中底層庫,給移除,然後引用上述驅動文件夾程序集

生成解決方案,錯誤基本也就那麼幾十個而已(大多數錯誤來源於資源文件加載),根據實際情況修改修改沒啥大問題,比如Npgsql底層驅動做了額外擴展,但對人大金倉而言(比如映射)則沒有,就刪除對應屬性等等,若使用VS 2022生成解決方案時,加載資源文件時可能會出現如下錯誤

DTE”同時存在於“EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”和“Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中

此時需要將/tools/Resources.tt打開,將如下

<#@ assembly name="EnvDTE" #>

指定本地該程序集實際目錄(可能有根本上的解決方案)

<#@ assembly name="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\PublicAssemblies\envdte.dll" #>

最後將EF.PG類庫生成程序集名指定爲人大金倉所提供程序集名稱

小小測試一下執行查詢並翻譯sql語句

弱弱透露下,官方現僅提供R6,據悉針對R3版本貌似不再迭代更新,據我猜測可能是其底層基於PG,部分功能沒有“借鑑”完,如下特性則是R3對應的Kdbndp.dll

總結

針對.NET 6基於Npgsql移植適配人大金倉稍微麻煩一丟丟,而對於.NET Core 3.x或5.x則簡單很多,相關命名空間替換基本沒啥錯誤,好了,這條捷徑你get到了?此處是不是應該艾特下官方做適配的小夥伴,直接借鑑(https://github.com/npgsql/efcore.pg)適配,無需過多折騰呢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章