教你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版本,最终可看到提供了对应不同版本的驱动

73b69647f26a59e681b08188b6a822b5.png

但是呢,EF Core版本仅为2.2.4,要是EF Core为3.1.x版本过高,当你调试时你会发现有异常,反编译其dll,其实里面有一部分方法并未实现,换句话说,在较高版本上底层EF Core做了实现,但2.2.4适配版本并未实现

我们用到的则是如下两个dll,第一个驱动作为程序集引用,另外一个则是适配EF Core

9c586501ebf4f94eab8c77f2ba16454b.png

对EF Core还算有点熟悉,适配EF Core无非就三步走策略

基础:Microsoft.EntityFrameworkCore

映射:Microsoft.EntityFramework.Relational

迁移:Microsfot.EntityFramwork.Design

上面前两步是必要条件,至于最后一步看项目是否用到迁移,没用到可无需引入

讲到这里,你以为我准备自主实现这一套吗?不存在的,有捷径不走为何非得装个b勒!到其底层借鉴于PS,于是乎我下载efcore.pg 6.0.1版本

2a07535a20bee1daf36e14f140b74d6d.png

1、根据自身需要:如上删除没必要的包,什么测试项目啊,支持对日期转换插件等等啊(实际只需要EFCore.PG)其结构与EF Core源码一毛一样

2、归纳演绎法:

12f4b004a10fbddb0ed55eab218216ab.png

人大金仓适配EF Core命名Kdbndp.EntityFrameworkCore.KingbaseES,是否找到等同规律!我们将Npgsql全局替换为Kdbndp,同理将PostgreSQL全局替换为KinbaseES

be5916cf5379b0c1f4ad738e185c922a.png

对于异常处理,PostgresException全局替换为KingbaseException,系统数据库pg_ 全局替换为sys_(不替换也没问题,主要用于数据库表迁移,若用到迁移,就必须替换)

接下来则是将底层驱动Npgsql.dll替换为Kdbndp.dll,比较正规放到驱动文件夹中

05f2588d79ce8e3b2609d49fee241fdb.png

将EFCore.PG项目文件中底层库,给移除,然后引用上述驱动文件夹程序集

9adceafd0f2c3991adb5bd03864e49e1.png

生成解决方案,错误基本也就那么几十个而已(大多数错误来源于资源文件加载),根据实际情况修改修改没啥大问题,比如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类库生成程序集名指定为人大金仓所提供程序集名称

34fd62071f8e40590739d667aa6bd523.png

小小测试一下执行查询并翻译sql语句

498d71aa5a17266e26bf0f80e91de6d2.png

弱弱透露下,官方现仅提供R6,据悉针对R3版本貌似不再迭代更新,据我猜测可能是其底层基于PG,部分功能没有“借鉴”完,如下特性则是R3对应的Kdbndp.dll

人大金仓虽基于PG,但更专注于数据分析方向以及物联网等领域助力于我国信息化建设和发展,个人认为还是很值得鼓励的

46e547eddb16494af5a8b54bb45a8121.png

针对.NET 6基于Npgsql移植适配人大金仓稍微麻烦一丢丢,而对于.NET Core 3.x或5.x则简单很多,相关命名空间替换基本没啥错误,好了,这条捷径你get到了?

此处是不是应该艾特下官方做适配的小伙伴,无需过多折腾,直接借鉴npgsql适配,是不是更快呢!c212d0dd54bdeeb6511d9d04c3eef23d.png52ad25a5105e3c06e2023723e4cedd02.pngbdb39f5964fb6e4c8710af61afc748c5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上最全几何技巧,远比傻做一千道题更实用!

▲ 点击查看爱因斯坦说&#xff1a;“一个人当他最初接触欧几里得几何学时&#xff0c;如果不曾为它的明晰性和可靠性所感动&#xff0c;那么他是不会成为一个科学家的。”我们现在再回过头想想&#xff0c;我们小时候学几何的时候&#xff0c;真的有感受到过这种爱因斯坦说的感…

Color the ball

Color the ball Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 30 Accepted Submission(s) : 13 Problem DescriptionN个气球排成一排&#xff0c;从左到右依次编号为1,2,3....N.每次给定2个整数a b(a < b),l…

sqlite字段是否存在_【漏洞预警】Linux内核存在本地提权漏洞(CVE20198912)

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)漏洞背景近日&#xff0c;Linux git中发布一个commit补丁&#xff0c;该补丁对应的漏洞是一个本地提权漏洞CVE-2019-8912&#xff0c;漏洞影响范围较广。根据git中的commit信息可知&#xf…

WPF 实现倒计时转场动画~

元旦元旦团团圆圆、WPF开发者在此真诚的祝愿开发者们在新的一年里心想事成、万事如意!WPF开发者QQ群&#xff1a; 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。01—代码如下一…

数字化架构

看过《EA企业架构》、《应用架构》和《IT与业务之间的鸿沟》文章的好多朋友给我发信息&#xff0c;能不能再写篇文章&#xff0c;各行各业的朋友都能看懂的、容易接受的&#xff0c;下面我将尽量尝试朝着这个方向努力写一篇数字化架构的文章&#xff0c;希望各界的朋友们都能有…

快速理解ASP.NET Core的认证与授权

ASP.NET Core的认证与授权已经不是什么新鲜事了&#xff0c;微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍。但有时候在开发过程中&#xff0c;我们也往往会感觉无从下手&#xff0c;或者由于一开始没有进行认证授权机制的设计与规划&#xff0…

字符用_连接的是什么加密_防水连接器外壳与铜针表面涂层有什么用?

防水连接器外壳与铜针表面涂层会关系到产品的质量&#xff0c;毕竟材料选择方面&#xff0c;以及手工劳动方面都是需要把好关的&#xff0c;这样我们才能确保做出来了的产品送至用户身上是最好的。(凌科BD系列防水连接器铜针镀金效果)1、无氰偏碱亮铜&#xff1a;在铜合金材料防…

【27前端】base标签带有href属性会让chrome里的svg元素url失效

一个chrome的问题&#xff0c;但具体原因不明。 触发条件&#xff1a;chrome浏览器base标签里href属性有值的时候 触发问题&#xff1a;svg里面的元素如果有用url的滤镜和模糊&#xff0c;则会失效&#xff0c;在firefox里和IE10没有发现这个问题。 正常状态&#xff1a; 有bas…

强大的矩阵奇异值分解(SVD)及其应用

本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用&#xff0c;但请注明出处&#xff0c;如果有问题&#xff0c;请联系wheeleastgmail.com 前言&#xff1a; 上一次写了关于PCA与LDA的文章&#xff0c;PCA的实现一般有两种&#xff0…

已婚男人看见美女都这个眼神?

1 答应我&#xff1a;穿汉服晚上就别骑车了&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 真香定理从来不迟到▼3 这万圣节大餐吃得下去吗&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这...也灵活了吧&#xff1f;▼5 谁…

一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序

开发制作小程序可以让商家更方便地引流获客、增加线上订单。尤其是今年小程序直播大火&#xff0c;商家有了新的运营私域流量的利器&#xff0c;因此做一个电商带直播功能的小程序是很有用的。如何开发一个这样的小程序呢&#xff1f;流程如下&#xff1a;在「上线了」sxl.cn注…

推荐:Flowchart 一种通过文本方式描述的流程图

流程图&#xff08;Flowchart&#xff09;&#xff1a;使用图形表示算法的思路是一种极好的方法&#xff0c;因为千言万语不如一张图。流程图在汇编语言和早期的BASIC语言环境中得到应用。相关的还有一种PAD图&#xff0c;对PASCAL或C语言都极适用。Flowchart 是一种通过文本方…

thinkpad如何屏蔽bios更新 提示电池_有种血赚叫“二手”!3000搞定原价万元ThinkPad小黑本,真省钱...

你会为买种草已久笔记本剁手吗&#xff1f;在这不容易的2020年上半年&#xff0c;准备剁手买新电脑之前都得犹豫好几天吧&#xff0c;毕竟大家的钱包都收紧了。就连闲鱼上带有“年会奖品”、“刚买的老婆让退货”标签的东西都少了&#xff0c;各家厂商推出的新品也都在走极致性…

转载集合

本页链接均可单机跳转&#xff0c;网址过长的只给出超链接 背包九讲 pdfhttps://github.com/tianyicui/pack/blob/master/V2.pdf wzk线段树笔记http://wyfcyx.logdown.com/posts/201802-summary-data-structures-zkw-segment-tree-details 1 #include<cstdio>2 #include&…

c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法

一直觉得.net在多媒体处理方面渣得不行。最近需要做一个摄像头的程序&#xff0c;为了方便&#xff0c;用了AForge这个开源项目。AForge项目中有AForge.Video和AForge.Video. DirectShow这两个子项目&#xff0c;可以方便的调用摄像头。但是这两个项目最终只能取得视频帧&#…

drawable文件怎么添加图片_怎么给PDF文件添加书签

现如今我们使用的电子文档逐步都被PDF取代&#xff0c;虽然PDF有很多好处&#xff0c;但相较Word文档打开就能随意修改不同&#xff0c;PDF并不能直接编辑。比如有时我们要给PDF添加书签&#xff0c;这样可以快速找到要的页面&#xff0c;要怎么操作呢&#xff1f;一说到PDF的任…