WTM的项目中EFCore如何适配人大金仓数据库

一、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);}

3、自增字段实现

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

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

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

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

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

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

文章转载自:踏平扶桑

原文链接:https://www.cnblogs.com/wdw984/p/18289632

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙架构之AOP

零、主要内容 AOP 简介ArkTs AOP 实现原理 JS 原型链AOP实现原理 AOP的应用场景 统计类: 方法调用次数统计、方法时长统计防御式编程:参数校验代理模式实现 AOP的注意事项 一、AOP简介 对于Android、Java Web 开发者来说, AOP编程思想并不…

TotalSegmentator---针对CT/MRI数据的自动分割

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享开源软件TotalSegmentator,该开源项目针对CT/MRI数据类型,对主要的解剖学结构进行自动分割,并且被集成到MITK中。希望对各…

如何分辨AI生成的内容?AI生成内容检测工具对比实验

检测人工智能生成的文本对各个领域的组织都提出了挑战,包括学术界和新闻界等。生成式AI与大语言模型根据短描述来进行内容生成的能力,产生了一个问题:这篇文章/内容/作业/图像到底是由人类创作的,还是AI创作的?虽然 LL…

TCP 握手数据流

这张图详细描述了 TCP 握手过程中,从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程,包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释: 客户端到服务器的初始连接请求 客户端发送 SYN 包: 客户端发起…

【音频特征提取】傅里叶变换算法源码学习记录

目录 背景快速理解FFT(快速傅里叶变换)IFFT(逆傅里叶变换)STFT(短时傅里叶变换) 代码实现FFT源代码IFFT源代码FFT、IFFT自己实验STFT源代码STFT自己实验 总结 背景 最近用到了相关操作提取音频信号特征&am…

Apache配置与应用(企业网站架构部署与优化)

本章结构 如果要修改以上文件中的内容,想要生效,需要在主配置文件中能够扫描到这个默认文件的修改: 文件在: Apache 连接保持 Apache 的访问控制 针对IP地址的限制缺陷是不可预知性,需要事先直到对方的IP才能进行基于…

剪画小程序:雷军演讲真精彩:视频/录音转文本

最近,雷军在小米汽车发布会的演讲精彩绝伦,其中的经典语句深深触动了我。为了能够随时随地回味这些充满智慧和激情的话语,我使用了剪画这一神奇的工具,将演讲视频转换成音频,并保存到了自己的手机里。 在这个信息爆炸的…

Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南

网页抓取已经成为任何处理网页数据提取的人都必须掌握的一项重要技能。无论你是开发者、数据科学家还是希望从网站收集信息的爱好者,Puppeteer都是你可以使用的最强大工具之一。本完整指南将深入探讨什么是Puppeteer以及如何有效地在网页抓取中使用它。 Puppeteer简…

【扩散对抗】AdvDiffuser: Natural Adversarial Example Synthesis with Diffusion Models

原文标题: AdvDiffuser: Natural Adversarial Example Synthesis with Diffusion Models 原文代码: https://github.com/lafeat/advdiffuser 发布年度: 2023 发布期刊: ICCV 目录 摘要背景创新点模型Adversarial GuidanceAdversar…

FlutterFlame游戏实践#15 | 生命游戏 - 演绎启动

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

零基础做项目---五子棋对战---day02

用户模块 完成注册登录,以及用户分数管理~使用数据库来保存上述用户信息. 使用 MyBatis来连接并操作数据库了 主要步骤: 1.修改 Spring的配置文件,使数据库可以被连接上. 2.创建实体类,用户, User 3.创建Mapper接口~ 4.实现MyBatis 的相关xml配置…

【ffmpeg系列二点五】(失败,建议放弃)ubuntu下进行源码构建,给ffmpeg7.0.1添加hevc支持。

背景 windows下构建失败,ffmpeg对于flv-h265的处理得到新的报错。 开始ubuntu22下编译 pre:清除我们之前编译的nightly版本 sudo rm -rf /usr/local/bin/ffmpeg sudo rm -rf /usr/local/bin/ffprobe sudo rm -rf /usr/local/bin/ffserver sudo rm -…

轻松掌握图片压缩技巧,释放存储空间!

前言 在这个充满视觉冲击的时代,我们每天都在创造和分享图片。但你是否发现,手机和电脑的存储空间越来越不够用了?图片文件过大,不仅占用空间,还影响传输速度和网页加载。今天,就让我来教你几招&#xff0…

Python爬虫:BeautifulSoup的基本使用方法!

1.简介 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析“标签树”等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup…

Python基础语法:变量和数据类型详解(整数、浮点数、字符串、布尔值)①

文章目录 变量和数据类型详解(整数、浮点数、字符串、布尔值)一、变量二、数据类型1. 整数(int)2. 浮点数(float)3. 字符串(str)4. 布尔值(bool) 三、类型转换…

生物打印后的生物力学过程

生物打印后的生物力学过程 3D生物打印技术在组织工程领域展现出巨大的潜力,但打印后组织的生物力学特性对其最终成功至关重要。本文将详细介绍打印后组织的生物力学特性及其在组织工程中的应用。 1. 打印后水凝胶交联 原位交联可以在生物打印过程中提供足够的机械…

LoRaWAN网络协议Class A/Class B/Class C三种工作模式说明

LoRaWAN是一种专为广域物联网设计的低功耗广域网络协议。它特别适用于物联网(IoT)设备,可以在低数据速率下进行长距离通信。LoRaWAN 网络由多个组成部分构成,其中包括节点(终端设备)、网关和网络服务器。Lo…

【Unity2D 2022:NPC】制作任务系统

一、接受任务 1. 编辑NPC对话脚本: (1)创建静态布尔变量用来判断ruby是否接受到任务 public class NPCDialog : MonoBehaviour {// 创建全局变量用来判断ruby是否接到任务public static bool receiveTask false; } (2&#xff…

类型“RouteRecordName”上不存在属性“includes”。 类型“symbol”上不存在属性“includes”

确定 route.name 运行时是 字符串,强制转换 为字符串。 removeRoute(id: string) { this.dynamRoute this.dynamRoute.filter(route > !(route.name as string).includes(id)) localStorage.setItem(dynamRoute, JSON.stringify(this.dynamRoute)) delete this.t…

4.3 设备管理

大纲 设备分类 输入输出 虚设备和SPOOLING技术