前言

目前.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)适配,无需过多折腾呢!

教你10分钟对接人大金仓EF Core 6.x的更多相关文章

  1. 通过ODBC接口访问人大金仓数据库

      国产化软件和国产化芯片的窘境一样,一方面市场已经存在性能优越的同类软件,成本很低,但小众的国产化软件不仅需要高价买入版权,并且软件开发维护成本高:另一方面,国产软件目前普遍难用,性能不稳定,Bug ...

  2. DBeaver连接达梦|虚谷|人大金仓等国产数据库

    前言 工作中有些项目可能会接触到「达梦.虚谷.人大金仓」等国产数据库,但通常这些数据库自带的连接工具使用并不方便,所以这篇文章记录一下 DBeaver 连接国产数据库的通用模版,下文以达梦为例(其他国 ...

  3. QT 之 ODBC连接人大金仓数据库

    QT 之 使用 ODBC 驱动连接人大金仓数据库 获取数据库驱动和依赖动态库 此操作可在人大金仓官网下载与系统匹配的接口动态库,或者从架构数据库的源码中获取驱动和依赖动态库 分别为: 驱动动态库:kd ...

  4. 通过jmeter连接人大金仓数据库

    某项目用的人大金仓数据库,做性能测试,需要用jmeter来连接数据库处理一批数据.jmeter连接人大金仓,做个记录. 1. 概要 在"配置元件"中添加"JDBC Con ...

  5. [翻译 EF Core in Action 1.10] 应该在项目中使用EF Core吗?

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. 教你10分钟内在Windows上完成Rails开发环境的安装和配置

    原文:http://www.cnblogs.com/tambor/archive/2011/12/25/rails_anzhuang_railsinstaller.html 一般来说,Windows开 ...

  7. 人大金仓KCI

    #include "bin/libkci.h" static void exit_nicely(KCIConnection *conn) { KCIConnectionDestor ...

  8. 10分钟就能学会的.NET Core配置

    .NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...

  9. 10分钟 在linux里创建.net core helloworld控制台程序

    官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 :选择和你本机适用的Linux版本,我这里用的是18.04. 第 ...

随机推荐

  1. ssh : connect to host XXX.XXX.XXX.XXX port : 22 connect refused

    初学者 写博客 如有不对之处请多多指教 我是要在俩个主机的俩个虚拟机上 用scp (security copy)进行文件远程复制. 但是 终端 提示 ssh : connect to host XXX ...

  2. 100个Shell脚本—【脚本6】拷贝目录

    [脚本6]拷贝目录 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下: 一.脚本 #!/bin/bash cd /root list=(`ls`) for i i ...

  3. show processlist命令详解

    1.show processlist; SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到 ...

  4. RunLoop基础知识以及GCD

    - 1.1 字面意思   a 运行循环   b 跑圈   - 1.2 基本作用(作用重大)   a 保持程序的持续运行(ios程序因而能一直活着不会死)    b 处理app中的各种事件(比如触摸事件 ...

  5. Java知识点总结——IO流框架

    IO框架 一.流的概念 概念:内存与存储设备之间传输数据的通道. 二.流的分类 按方向分类: 输入流:将<存储设备>中的内容读入到<内存>中 输出流:将<内存>中的 ...

  6. frp实现基于反向代理的内网穿透

    个人博客主页: xzajyjs.cn frp是什么 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP.TCP.UDP等众多协议 ...

  7. iphone4 与iphone5适配

    转:http://www.cnblogs.com/ygm900/archive/2013/05/24/3098015.html iphone4/4s 应用程序升级适配 iphone5 的方法有很多,而 ...

  8. 可视报表(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 原来一直有一个执念,做项目的人电脑上一定要安装Project软件,今天突然知道了,原来领导的电脑上,可以不装,因为,Pro ...

  9. CF1110A Parity 题解

    Content 求下面式子的奇偶性,其中 \(a_i,k,b\) 会在输入中给定. \[\sum\limits_{i=1}^k a_i\cdot b^{k-i} \] 数据范围:\(2\leqslan ...

  10. Base64编码原来是这么回事儿

    鸣谢CSDN文章:https://blog.csdn.net/believesoul/article/details/84100616 一.言简意赅理解Base64编码 就是将以"字节&qu ...