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快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源项目有哪些机遇与挑战

目录 1.概述 2.开源项目的发展趋势 2.1. 开源项目的发展现状 2.2. 开源社区的活跃度 2.3. 开源项目在技术创新中的作用 3.参与开源的经验分享 3.1. 选择开源项目 3.2. 理解项目结构和文档 3.3. 贡献代码 3.4. 与开源社区的合作 3.5. 学习和成长 4.开源项目的挑战 …

buuctf 二维码

文件下载下来是一个png的文件 做misc永远的好习惯就是先运行,后010 先运行,这个运行肯定就是扫码 啥也没有 里面还有个ZIP文件(zip的发明人名字是PK) 放在kali上binwalk分离 CTF工具隐写分离神器Binwalk安装和详细使用方法_binwalk下载-CSDN博客 里面有个text,需要密码 我…

ESP32驱动摄像头:1.驱动OV2640模块(待验证)

一、装ArduCam库和ESPAsyncWebServer库 二、参考代码 #include <Wire.h> #include <ArduCAM.h> #include <SPI.h> #include <WiFi.h> #include <ESPAsyncWebServer.h>#define CAM_CS 32 // modify according to your own wiring #define OV2640…

IP 地址:优化网络游戏

IP地址和网络游戏 在现代网络游戏中&#xff0c;IP地址不仅用于服务器分配&#xff0c;还能针对性进行玩家匹配与优化网络延迟。本文将探讨IP地址在网络游戏中的具体应用。 *服务器分配* 全球服务器分布&#xff1a; 网络游戏需要在全球范围内提供快速、稳定的连接&#xff…

【机器学习】主成分分析(PCA):数据降维的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 主成分分析&#xff08;PCA&#xff09;&#xff1a;数据降维的艺术引言PCA的基…

【TypeScript 学习】TypeScript 枚举类型发散:基于位运算的权限管理 CRUD 操作

文章目录 TypeScript 枚举类型发散&#xff1a;基于位运算的权限管理 CRUD 操作1 问题由来2 具体实现2.1 新增权限2.2 删除权限2.3 查询权限&#xff08;即判定存在与否&#xff09;2.4 修改权限2.5 完整测试 3 小结 TypeScript 枚举类型发散&#xff1a;基于位运算的权限管理 …

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【加解密(C/C++)】

加解密(C/C) 以AES 256密钥为例&#xff0c;完成加解密。具体的场景介绍及支持的算法规格。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生成密钥 指定密钥别名。初始化密钥属性集。调用OH_Huks_GenerateKeyItem生成密钥)…

[Linux安全运维] Linux用户以及权限管理

Linux用户以及权限管理 Linux用户和组 用户信息文件pasawd /etc/passwd文件用于存储用户的信息 :用于分割不同的字段信息 字段示例&#xff08;第一行&#xff09;含义说明1root用户名2x密码占位符x代表用户有密码存储在shadow文件中无内容代表用户登录系统不需要密码30UID…

一款24小时实时检测的六氟化硫气体泄漏报警系统

尽管当前工业生产模式越来越趋于自动化、智能化&#xff0c;但安全生产仍然是时下屡被提及的话题。在配电室等使用六氟化硫气体的众多领域中&#xff0c;由于气体泄漏而引发的中毒、火灾、爆炸、窒息事故仍高发频发。因此&#xff0c;安装六氟化硫气体泄漏报警监测系统仍是企业…

C语言 | Leetcode C语言题解之第226题翻转二叉树

题目&#xff1a; 题解&#xff1a; struct TreeNode* invertTree(struct TreeNode* root) {if (root NULL) {return NULL;}struct TreeNode* left invertTree(root->left);struct TreeNode* right invertTree(root->right);root->left right;root->right le…

如何探索高效知识管理:FlowUs知识库体验很好

在当今信息爆炸的时代&#xff0c;有效的知识管理对于个人和团队的发展至关重要。FlowUs 知识库作为一款创新的知识管理工具&#xff0c;正逐渐成为众多用户的首选&#xff0c;为他们带来了高效、便捷和有条理的知识管理体验。 FlowUs 知识库的一大特色在于其简洁直观的界面设计…

基于单片机的温控光控智能窗帘设计探讨

摘 要&#xff1a; 文章使用的核心原件是 AT89C52 单片机&#xff0c;以此为基础进行模块化的设计&#xff0c;在整个设计中通过加入光检测模块和温度检测模块&#xff0c;从而对室内的温度和光照强度进行检测&#xff0c;然后将检测得到的数据传输给单片机&#xff0c;单片机…

【自用】【高昆轮概率论与数理统计笔记】2.1 分布函数的概念与性质

不定期更新&#xff0c;前面的章节会在学完后补回来&#xff0c;重新学学概率&#xff0c;当年考研考的数学二&#xff0c;没有概率基础&#xff0c;想自己补补&#xff0c;视频课是高昆轮老师讲的浙大四版概率论教材的视频课&#xff0c;地址&#xff1a; 第一章&#xff1a;h…

印尼“支付宝” DANA 如何借力 OceanBase 实现3个“关键零”

当前&#xff0c;移动支付在东南亚正迅猛发展&#xff0c;据谷歌、淡马锡与贝恩公司发布的报告预测&#xff0c;东盟地区蓬勃兴起的移动支付市场有望在2030年突破至2万亿美元的交易规模。 在此背景下&#xff0c;DANA作为印尼——东南亚最大经济体中的一员&#xff0c;秉持着推…

基于vue的引入登录界面

以下是一些常见的登录页面布局&#xff1a; 1. 中心布局 - 登录表单位于页面的中心位置&#xff0c;通常包括用户名输入框、密码输入框、登录按钮等元素。页面背景简洁&#xff0c;以突出登录表单。 - 这种布局常见于大多数网站和应用&#xff0c;简洁明了&#xff0c;用户注意…

Android 性能优化之内存优化

文章目录 Android 性能优化之内存优化内存问题内存抖动内存泄露内存溢出 检测工具Memory ProfilerMemory AnalyzerLeakCanary 内存管理机制JavaAndroid 解决内存抖动问题模拟问题代码使用Memory Profiler工具检测优化技巧 内存泄露问题模拟问题代码使用LeakCanary工具检测优化技…

深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件

本文将了解到Rokid AR开发组件 一、RKCameraRig组件1.脚本属性说明2.如何使用 二、PointableUI组件1.脚本属性说明2.如何使用 三、PointableUICurve组件1.脚本属性说明2.如何使用 四、RKInput组件1.脚本属性说明2.如何使用 五、RKHand组件1.脚本属性说明2.如何使用3.如何禁用手…

数据结构与算法-动态规划-三角形最小路径和

三角形最小路径和 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &…

web 网络安全

Web网络安全是网络安全的一个重要分支&#xff0c;专注于保护Web应用程序、服务和网站免受各种网络威胁。学习Web网络安全涉及多个层面的知识和技能&#xff0c;以下是一些主要的学习领域&#xff1a; 一、XSS攻击 全称:&#xff1a;Cross Site Script &#xff08;跨站脚本&a…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…