一、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. WEB服务与NGINX(6)-location使用详解

    目录 1. location的详细用法 1.1 精确匹配 1.2 区分大小写 1.3 不区分大小写 1.4 匹配URI开始 1.5 测试location的优先级 1.6 location的生产使用示例 ...

  2. 用poi-tl导出word报告-支持表格文字刷色、背景刷色、表格合并单元格

    官方教程地址:http://deepoove.com/poi-tl/ apache poi 入门示例教程:http://deepoove.com/poi-tl/apache-poi-guide.htm ...

  3. grads读取netcdf文件,报错SDF file has no discernable X coordinate解决办法

    1.netcdf文件格式说明 netCDF数据格式在气象中有广泛的应用,这种格式有一定的复杂性.作为数据的使用者可以不用对数据格式了解得很详细,不过大致的了解还是有必要的.netCDF是自描述的二进制 ...

  4. OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的

    背景 前段时间公司领导让我排查一个关于在 JDK21 环境中使用 Spring Boot 配合一个 JDK18 新增的一个 SPI(java.net.spi.InetAddressResolverPr ...

  5. OpenNESS NTS 的前世今生

    目录 文章目录 目录 NEV SDK NEV SDK 的软件架构 NEV SDK 的持续演进 OpenNESS NTS NTS 在 VM 场景中的应用 NTS 在 Container 场景中的应用 N ...

  6. 【U8】快速获取u8单据的类型key值

    win10下 打开 写字板,直接搜索栏搜索写字板打开. 登录u8,找到需要的单据,以基础档案存货为例,打开存货档案界面. 按住键盘ctrl+shift,鼠标左键单据单据上的某个按钮,以新增按钮为例,单 ...

  7. Vue 组件生命周期:探索钩子

    title: Vue 组件生命周期:探索钩子 date: 2024/5/27 18:42:38 updated: 2024/5/27 18:42:38 categories: 前端开发 tags: 生 ...

  8. Android 13 - Media框架(3)- MediaPlayer生命周期

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节. 1.MediaPlayer ...

  9. 阅读LXH《FFMPEG+SDL的视频播放器》总结

    一.原文地址 https://blog.csdn.net/leixiaohua1020/article/details/46889389 在此向雷霄骅致敬!!! 二.视频播放器实现思路 1)视频播放器 ...

  10. Github Fork仓库的冲突与同步管理

    在使用Github进行协作开发时,fork一个仓库并在本地进行开发是常见的工作流程.然而,当源仓库(上游仓库)有了更新时,如何同步这些更新并解决可能的合并冲突是一个关键问题.本文将详细介绍如何管理这些 ...