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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

教你10分钟对接人大金仓EF Core 6.x

發(fā)布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教你10分钟对接人大金仓EF Core 6.x 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【導(dǎo)讀】目前.NET Core中據(jù)我了解到除了官方的EF Core外,還用的比較多的ORM框架(恕我孤陋寡聞哈,可能還有別的)有FreeSql、SqlSugar(排名不分先后)。

FreeSql和SqlSugar都已早早支持國產(chǎn)數(shù)據(jù)庫比如人大金倉、神通、達夢,要是項目要求支持適配國產(chǎn)數(shù)據(jù)庫中,同時項目若早已使用上如上兩種ORM框架,那并可以很愉快的玩耍了,要是使用EF Core就有點傷腦筋,只能自主寫一套適配

此文只是以最新版本作為示例,任意版本都可快速適配完人大金倉,基于我大國產(chǎn)數(shù)據(jù)庫收費,當然就有技術(shù)支持,大可催官方出EF Core 5.x、6.x

當項目進行框架升級,但等不及官方出迭代版本,出完后,可能還需要當當小白鼠試驗一番,本文未嘗不是一條先行之道

十分鐘對接人大進倉驅(qū)動

通過官網(wǎng)僅提供V8 R6版本,所以下載其windows版本,最終可看到提供了對應(yīng)不同版本的驅(qū)動

但是呢,EF Core版本僅為2.2.4,要是EF Core為3.1.x版本過高,當你調(diào)試時你會發(fā)現(xiàn)有異常,反編譯其dll,其實里面有一部分方法并未實現(xiàn),換句話說,在較高版本上底層EF Core做了實現(xiàn),但2.2.4適配版本并未實現(xiàn)

我們用到的則是如下兩個dll,第一個驅(qū)動作為程序集引用,另外一個則是適配EF Core

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

基礎(chǔ):Microsoft.EntityFrameworkCore

映射:Microsoft.EntityFramework.Relational

遷移:Microsfot.EntityFramwork.Design

上面前兩步是必要條件,至于最后一步看項目是否用到遷移,沒用到可無需引入

講到這里,你以為我準備自主實現(xiàn)這一套嗎?不存在的,有捷徑不走為何非得裝個b勒!到其底層借鑒于PS,于是乎我下載efcore.pg?6.0.1版本

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

2、歸納演繹法:

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

對于異常處理,PostgresException全局替換為KingbaseException,系統(tǒng)數(shù)據(jù)庫pg_?全局替換為sys_(不替換也沒問題,主要用于數(shù)據(jù)庫表遷移,若用到遷移,就必須替換)

接下來則是將底層驅(qū)動Npgsql.dll替換為Kdbndp.dll,比較正規(guī)放到驅(qū)動文件夾中

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

生成解決方案,錯誤基本也就那么幾十個而已(大多數(shù)錯誤來源于資源文件加載),根據(jù)實際情況修改修改沒啥大問題,比如Npgsql底層驅(qū)動做了額外擴展,但對人大金倉而言(比如映射)則沒有,就刪除對應(yīng)屬性等等

若使用VS 2022生成解決方案時,加載資源文件時可能會出現(xiàn)如下錯誤

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類庫生成程序集名指定為人大金倉所提供程序集名稱

小小測試一下執(zhí)行查詢并翻譯sql語句

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

人大金倉雖基于PG,但更專注于數(shù)據(jù)分析方向以及物聯(lián)網(wǎng)等領(lǐng)域助力于我國信息化建設(shè)和發(fā)展,個人認為還是很值得鼓勵的

針對.NET 6基于Npgsql移植適配人大金倉稍微麻煩一丟丟,而對于.NET Core 3.x或5.x則簡單很多,相關(guān)命名空間替換基本沒啥錯誤,好了,這條捷徑你get到了?

此處是不是應(yīng)該艾特下官方做適配的小伙伴,無需過多折騰,直接借鑒npgsql適配,是不是更快呢!

總結(jié)

以上是生活随笔為你收集整理的教你10分钟对接人大金仓EF Core 6.x的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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