一、引言

做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等。在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架。

不过最近园子关于.NET ORM HiSql的讨论挺多的,本系列将之前使用SqlSuger的一个项目,使用HiSql框架改造一下改项目。

c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比对比

项目介绍:项目是一个通用的后台管理系统,包含菜单管理、权限管理、组织架构、用户管理等等。

数据库采用SqlServer 2016;前端使用elementui,后端采用.Net5 Web Api。

二、集成HiSql到项目

  1. 安装 HiSql 核心包、 HiSql.SqlServer。

2、在项目中新建类文件 HiSqlSetupExtension.cs, 用户注入数据库配置,hisql数据库访问对象。

点击查看代码
  1. using HiSql;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using System;
  5. namespace H.CRM.Action.API.Helper
  6. {
  7. public static class HiSqlSetupExtension
  8. {
  9. public static IServiceCollection AddHiSqlSetup(this IServiceCollection services)
  10. {
  11. //注入HiSqlConfig
  12. services.AddTransient<HiSqlConfig>();
  13. //注入HiSqlClient
  14. services.AddTransient<HiSqlClient>((d) =>
  15. {
  16. var config = d.GetService<HiSqlConfig>();
  17. var hisql = new HiSqlClient(config);
  18. return hisql;
  19. });
  20. services.AddSingleton((d) =>
  21. {
  22. HiSql.Global.RedisOn = true;//开启redis缓存
  23. HiSql.Global.RedisOptions = new RedisOptions { Host = "127.0.0.1", PassWord = "", Port = 6379, CacheRegion = "HRM", Database = 5 };
  24. HiSql.Global.NumberOptions.MultiMode = true;
  25. HiSql.Global.SnroOn = true;
  26. var config = d.GetService<HiSqlConfig>();
  27. HiSqlClient sqlClient = new HiSqlClient(config);
  28. sqlClient.CodeFirst.InstallHisql();
  29. var number = new SeriNumber(sqlClient);
  30. return number;
  31. });
  32. return services;
  33. }
  34. }
  35. class HiSqlConfig : ConnectionConfig
  36. {
  37. static readonly NLog.Logger logger = NLog.LogManager.GetLogger("HiSqlSetup");
  38. public HiSqlConfig(IConfiguration configuration)
  39. {
  40. DbType = DBType.SqlServer;
  41. DbServer = "HISQL";
  42. ConnectionString = configuration.GetSection("ConnectionStrings:Admin").Value;
  43. Schema = "dbo";
  44. SqlExecTimeOut = 1000 * 5;
  45. AppEvents = new AopEvent()
  46. {
  47. OnDbDecryptEvent = (connstr) =>
  48. {
  49. //解密连接字段
  50. return connstr;
  51. },
  52. OnLogSqlExecuting = (sql, param) =>
  53. {
  54. //sql执行前 日志记录 (异步)
  55. #if DEBUG
  56. logger.Trace($"执行前sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
  57. #endif
  58. },
  59. OnLogSqlExecuted = (sql, param) =>
  60. {
  61. #if DEBUG
  62. //sql执行后 日志记录 (异步)
  63. logger.Trace($"执行后sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
  64. #endif
  65. },
  66. OnSqlError = (sqlEx) =>
  67. {
  68. //sql执行错误后 日志记录 (异步)
  69. logger.Error($"执行错误:{sqlEx.Message} sql:{sqlEx.Sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
  70. },
  71. OnTimeOut = (int timer) =>
  72. {
  73. //logger.Trace($"执行超时:{timer} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
  74. }
  75. };
  76. }
  77. }
  78. }

3、在 Startup 中的ConfigureServices方法中,添加 hisql的使用。

//注入Hisql相关 services.AddHiSqlSetup();

4、新建 控制器 HiSqlController,添加初始化方法。

点击查看代码
  1. using Microsoft.AspNetCore.Mvc;
  2. using HiSql;
  3. using System.Linq;
  4. namespace HSMB.Admin.WebApi.Controllers
  5. {
  6. [Route("api/[controller]/[action]")]
  7. [ApiController]
  8. public class HiSqlController : ControllerBase
  9. {
  10. private readonly HiSqlClient sqlClient;
  11. public HiSqlController(
  12. HiSqlClient hiSqlClient
  13. )
  14. {
  15. this.sqlClient = hiSqlClient;
  16. }
  17. [HttpGet, HttpPost]
  18. public IActionResult Install()
  19. {
  20. sqlClient.CodeFirst.InstallHisql();
  21. var tables = sqlClient.DbFirst.GetTables().ToList().Where(t=>t.TabName.StartsWith("H"));
  22. return new JsonResult(tables);
  23. }
  24. }
  25. }

5、启动项目后,访问 项目地址 http://localhost:8868/api/hisql/Install 初始化hisql。

如图表示初始化成功,同时在数据库也可以看到,系统创建了下图的4个基础表:

1.Hi_TabModel #表结构信息主表

2.Hi_FieldModel #表结构信息明细表

3.Hi_Domain #数据域

4.Hi_DataElement #数据元素

到此,项目就完成了HiSql的引入了,后面就可以愉快的使用HiSql各个功能。

.NET ORM框架HiSql实战-第一章-集成HiSql的更多相关文章

  1. .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)

    一.引言 上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现. 菜单管理界面如图: 二.修改增删改查相关代 ...

  2. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  3. hisql ORM 框架研究(国内第一个支持HANA的ORM框架)

    HiSql 操作说明文档 V1.0 下一代ORM框架 国内第一个支持HANA的ORM框架 hisql源码下载 git clone https://github.com/tansar/HiSql.git ...

  4. activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  5. Spring3实战第一章 Aop 切面 XML配置

    刚看spring3实战书籍第一章  切面以前没有关注过 现在看到了  随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...

  6. 2017.2.20 activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  7. 学习笔记-[Maven实战]-第一章:Maven简介

    Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...

  8. DirectX12 3D 游戏开发与实战第一章内容

    DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向 ...

  9. 核心系统命令实战 第一章Linux命令行简介

    第一章Linux命令行简介 1.1 Linux命令行概述 1.1.1 Linux 命令行的开启和退出 开启:登陆账号密码进入系统 退出:exit/logout  快捷键:Ctrl+d 1.1.2 Li ...

随机推荐

  1. Java之IO流技术详解

    何为IO? 首先,我们看看百度给出的解释. I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分. i是写入,Input的首字母.o是输出,Output的首字母. IO 也称为 ...

  2. 尤娜故事-迷雾-springboot扮酷小技巧

    前情回顾 从前,有一个简单的通道系统叫尤娜-- 尤娜系统的第一次飞行中换引擎的架构垂直拆分改造 四种常用的微服务架构拆分方式 尤娜,我去面试了 正文 我回到日常的尤娜系统建设中,最近事情比较少,总有一 ...

  3. python学习番外篇——字符串的数据类型转换及内置方法

    目录 字符串的数据类型转换及内置方法 类型转换 内置方法 优先掌握的方法 需要掌握的方法 strip, lstrip, rstrip lower, upper, islower, isupper 插入 ...

  4. pycharm 打包py程序为exe

    传送门 在终端输入 pyinstaller -F xxx.py -n 新名字 --noconsole --noconsole 去掉cmd命令窗口 -F 打包成一个文件 -D 打包成一个文件夹 -i 加 ...

  5. JZ009乘积小于k的子数组

    title: 乘积小于k的子数组 题目描述 题目链接:乘积小于k的子数组.剑指offer009 解题思路 注意: 一开始的乘积k值就是小的,随着右边窗口移动才会不断增大 怎么样的条件才能更新左窗口:当 ...

  6. 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法

    华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...

  7. arts-week10

    Algorithm 905. Sort Array By Parity - LeetCode Review Who's Afraid of the Big Bad Preloader? 一文读懂前端缓 ...

  8. nginx 主运行配置详解(nginx.conf)

    #==基础配置==# user nginx; #设置运行用户,当运行NGINX时,进程所使用的用户,则进程拥有该用户对文件或目录的操作权限. worker_processes 4; #设置工作进程数量 ...

  9. ABP框架之——数据访问基础架构

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享阅读心得,希望我的文章能成为你成长路上的一块垫脚石,我们一起精进. 几乎所有的业务应用程序都要适用一种数据库基础架构,用来实现数据访问逻辑,以便从数 ...

  10. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...