一、WTM是什么

WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。
2017年9月,将代码移植到了.Net Core上,并进行了深度优化和重构,推出了基于Asp.net Core和EF Core的全新框架,新框架在架构,稳定性,速度上都有长足进步,真正成为一款高效开发的利器。
经历了四年间数十个项目的考验,框架逐步的完善,推出了四个主要版本。
WTM框架设计的核心理念就是”尽一切可能提高开发效率“。
WTM框架把常规编码结构化,重复编码自动化,它不仅是一个框架,它是强有力的生产力工具!
在不分离的模式下,它连通了前台UI和后台代码。你不需要前后台分离,不需要两个人配合,减少成本,缩短工期。
在前后端分离的模式下,同样可以使用代码生成器同时生成前台和后台的代码,极大的降低了前后端人员的沟通成本,从本质上提升了开发效率,让“分离”不再复杂和昂贵。
框架特点:
一键生成WTM项目
一键生成增删改查,导入导出,批量操作代码
支持一对多,多对多关联模型的识别和代码生成
支持React+AntD,Vue+Element,LayUI,Blazor等多种前端模式
支持sqlserver,mysql,pgsql,sqlite,Oracle等多种数据库
封装了Layui,AntD,Element的大部分控件,编写前台更加简便
提供了很多基类,封装了绝大部分后台常用操作
提供了用户,角色,用户组,菜单,日志等常用模块
支持数据权限的开发和配置
支持读写分离和数据库分库

开源地址:
(GitHub) https://github.com/WalkingTec/WalkingTec.Mvvm
(Gitee) https://gitee.com/liuliang-wtm/WTM

二、人大金仓是什么
人大金仓数据库管理系统[简称:KingbaseES]是北京人大金仓信息技术股份有限公司[简称人大金仓]的核心产品,具有大型通用、"三高"(高可靠、高性能、高安全)、"三易"(易管理、易使用、易扩展)、运行稳定等特点,是唯一入选国家自主创新产品目录的数据库产品,也是国家级、省部级实际项目中应用最广泛的国产数据库产品。
人大金仓数据库管理系统 KingbaseES(KES) 是面向全行业、全客户关键应用的企业级大型通用数据库管理系统,适用于联机事务处理、查询密集型数据仓库、要求苛刻的互联网应用等场景,提供全部应用开发及系统管理功能,提供性能增强特性,可支持主备集群、读写分离集群、多活共享存储集群等全集群架构,具有高性能、高安全、高可用、易使用、易管理、易维护的特点,支持所有国内外主流CPU、操作系统与云平台部署。
下载试用地址:
https://www.kingbase.com.cn/xzzx/index.htm
可在下载页面申请开发试用授权文件,授权时间365天。
安装过程比较简单,唯一需要注意的就是在安装过程中可以选择数据库兼容类型,这里选择的是UTF8字符集,兼容MySql,大小写不敏感。

三、迁移注意事项

项目用的是.NET6框架,在项目里引用(或者NuGet安装)人大金仓官方的EFCore的Kdbndp驱动Kdbndp.EntityFrameworkCore6.KingbaseES。

1、工作流使用的数据库所属模式手动创建

WTM集成了Elsa的工作流,在迁移的过程中需要把Elsa所需要的几个表迁移到特定的模式下面,否则运行会提示找不到Elsa.xxxx的错误提示;

模式右键-->新建-->Elsa,然后把所需要的这几个表迁移到它下面。

2、字段类型转换

绝大部分的Mysql字段可以无缝迁移到人大金仓,对于mysql的bool类型的字段需要特别关注一下,会迁移成bit或者int类型,需要手动调整成人大金仓的bool类型;

mysql的datetime类型,迁移到人大金仓后对应的类型是timestamp。这个需要在DataContext的OnConfiguring中指定一下参数,否则会报以下错误:

System.InvalidCastException: Cannot write DateTime with Kind=Local to PostgreSQL type 'timestamp with time zone', only UTC is supported. Note that it's not possible to mix DateTimes with different Kinds in an array/range. See the Npgsql.EnableLegacyTimestampBehavior AppContext switch to enable legacy behavior.

具体参考:https://www.npgsql.org/doc/types/datetime.html#timestamps-and-timezones

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (DBType == DBTypeEnum.PgSql)
{
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
}
base.OnConfiguring(optionsBuilder);
}

2、自增字段实现

在mysql、sqlserver等数据库中,只要把字段设置为int,然后打开自增选项后,字段就会实现自增功能。在人大金仓中,默认没有这种字段类型,官网中称这种为序数类型,类似于Oracle的SEQUENCE:

smallserial、serial 和 bigserial类型不是真正的类型, 它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的 AUTO_INCREMENT 属性)。 这是 KingbaseES 特有的创建一个自增列的方法。

因为 smallserial、serial 和 bigserial 是用序列实现的,所以即使没有删除过行,在出现在列中的序列值可能有“空洞”或者间隙。如果一个从序列中分配的值被用在一行中,即使该行最终没有被成功地插入到表中,该值也被“用掉”了。例如,当插入事务回滚时就会发生这种情况。更多信息参见序列操作函数中的 nextval()。

在人大金仓中需要通过序列类型实现字段自增的方式,需要我们在数据库的Public模式下的序列中,创建一个序列(这里设置的最大值为bigint的最大值附近,具体可自己决定):

 

随后,在需要自增的字段,给它的默认值设置为 nextval('USER_SEQUENCE'::regclass)  ,这样在每次insert数据的时候,这个字段会自动从序列中获取最新的值来填充(不需要代码中进行赋值)。

至此就基本完成了mysql到人大金仓的数据库迁移。

WTM的项目中EFCore如何适配人大金仓数据库的更多相关文章

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

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

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

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

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

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

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

    前言 目前.NET Core中据我了解到除了官方的EF Core外,还用的比较多的ORM框架(恕我孤陋寡闻哈,可能还有别的)有FreeSql.SqlSugar(排名不分先后).FreeSql和SqlS ...

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

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

  6. & vue项目中的rem适配

    有个朋友问我在vue项目怎么做rem适配,我工作中都是用的dva,但是我感觉道理都是一样的,换汤不换药.配完就顺手写下来吧! 需要安装两个插件库 lib-flexible和px2rem-loader ...

  7. ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。

    下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...

  8. 人大金仓KCI

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

  9. 使用EFCore的Code First和MySql数据库迁移

    1. 感慨一下 随着.net core的持续更新和升级,至少对于从事.net开发的人员和即将踏入这个领域的人来说,我相信大家的热情还是持续高涨的.国内的.net开发生态相比于之前来说,还是大有所好转的 ...

  10. Asp.Net Core中创建多DbContext并迁移到数据库

    在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbConte ...

随机推荐

  1. linux用户与用户组管理

    linux用户与用户组管理 目录 linux用户与用户组管理 1.linux用户管理 1.1 用户基础 1.2 /etc/passwd:用户信息文件 1.3 /etc/shadow:用户密码信息文件 ...

  2. python教程3.3:字符和编码

    1.二进制 计算机只能存储和识别二进制,但是人类常用的字母.数字.汉字怎么用计算机存储和识别呢? 人类强行约定一个对应表,把数字.字母和数字进行对应上,这样就可以用二进制表示字母和数字了. 2.ASC ...

  3. 使用js有效括号匹配封装函数

    点击查看代码 function isValidParentheses(str) { // 定义一个栈,用于存储待匹配的左括号 let stack = []; // 定义一个对象,用于快速判断括号是否成 ...

  4. 用 C 语言开发一门编程语言 — 语法解析器

    目录 文章目录 目录 前文列表 编程语言的本质 词法分析 语法分析 使用 MPC 解析器组合库 安装 快速入门 实现波兰表达式的语法解析 波兰表达式 正则表达式 代码实现 前文列表 <用 C 语 ...

  5. PageOffice 6 保存数据区域数据同时保存文档

    在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来.这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件 ...

  6. PageOffice 在线打开 word 文件并添加水印

    一.服务器端方法插入水印 1.插入文字水印 WordDocument doc = new WordDocument(); //添加水印 ,设置水印的内容 doc.getWaterMark().setT ...

  7. Asp-Net-Core开发笔记:使用原生的接口限流功能

    前言 之前介绍过使用 AspNetCoreRateLimit 组件来实现接口限流 从 .Net7 开始,AspNetCore 开始内置限流组件,当时我们的项目还在 .Net6 所以只能用第三方的 现在 ...

  8. Windows pyinstaller wxPython pyecharts无法正常显示问题

    Windows pyinstaller wxPython pyecharts无法正常显示问题 最近遇到一个pyinstaller打包wxPython pyecharts无法显示的问题,pyechart ...

  9. 004. github使用

    github的使用 GitHub是一个git版本库的托管服务,GitHub是目前全球最大的软件仓库,拥有上班玩的开发者用户,也是软件开发和寻找资源的最佳途径,GitHub不仅可以托管各种git版本参控 ...

  10. webpack js兼容处理

    webpack在不需要引入任何loader可以对于js进行打包处理,但是它不会对于js兼容性进行任务的处理,而我们编写的项目是需要在不同的浏览器中运行的,此时就需要对于js的兼容性在打包过程中进行对应 ...