一、引言

做.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数据库访问对象。

点击查看代码
using HiSql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System; namespace H.CRM.Action.API.Helper
{ public static class HiSqlSetupExtension
{
public static IServiceCollection AddHiSqlSetup(this IServiceCollection services)
{
//注入HiSqlConfig
services.AddTransient<HiSqlConfig>();
//注入HiSqlClient
services.AddTransient<HiSqlClient>((d) =>
{
var config = d.GetService<HiSqlConfig>();
var hisql = new HiSqlClient(config);
return hisql;
}); services.AddSingleton((d) =>
{
HiSql.Global.RedisOn = true;//开启redis缓存
HiSql.Global.RedisOptions = new RedisOptions { Host = "127.0.0.1", PassWord = "", Port = 6379, CacheRegion = "HRM", Database = 5 };
HiSql.Global.NumberOptions.MultiMode = true;
HiSql.Global.SnroOn = true;
var config = d.GetService<HiSqlConfig>();
HiSqlClient sqlClient = new HiSqlClient(config);
sqlClient.CodeFirst.InstallHisql();
var number = new SeriNumber(sqlClient);
return number;
}); return services;
}
} class HiSqlConfig : ConnectionConfig
{
static readonly NLog.Logger logger = NLog.LogManager.GetLogger("HiSqlSetup");
public HiSqlConfig(IConfiguration configuration)
{
DbType = DBType.SqlServer;
DbServer = "HISQL";
ConnectionString = configuration.GetSection("ConnectionStrings:Admin").Value;
Schema = "dbo";
SqlExecTimeOut = 1000 * 5;
AppEvents = new AopEvent()
{
OnDbDecryptEvent = (connstr) =>
{
//解密连接字段
return connstr;
},
OnLogSqlExecuting = (sql, param) =>
{
//sql执行前 日志记录 (异步)
#if DEBUG
logger.Trace($"执行前sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnLogSqlExecuted = (sql, param) =>
{
#if DEBUG
//sql执行后 日志记录 (异步)
logger.Trace($"执行后sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnSqlError = (sqlEx) =>
{
//sql执行错误后 日志记录 (异步)
logger.Error($"执行错误:{sqlEx.Message} sql:{sqlEx.Sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
},
OnTimeOut = (int timer) =>
{
//logger.Trace($"执行超时:{timer} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
}
};
}
} }

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

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

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

点击查看代码
  using Microsoft.AspNetCore.Mvc;
using HiSql;
using System.Linq; namespace HSMB.Admin.WebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class HiSqlController : ControllerBase
{
private readonly HiSqlClient sqlClient; public HiSqlController(
HiSqlClient hiSqlClient
)
{
this.sqlClient = hiSqlClient;
}
[HttpGet, HttpPost]
public IActionResult Install()
{
sqlClient.CodeFirst.InstallHisql();
var tables = sqlClient.DbFirst.GetTables().ToList().Where(t=>t.TabName.StartsWith("H"));
return new JsonResult(tables);
}
}
}

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. 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)

    2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...

  2. 百度AI人脸检测——解析JSON 数据格式

    1.了解一下 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据.不过这个时候就出现了一个问题,这些数据到底要以什么样的格式在网络上传输呢 ...

  3. kafka从入门到了解

    kafka从入门到了解 一.什么是kafka Apache Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布的消息队列,一般用作系统间解耦.异步通信.削峰填谷等作用. ...

  4. 自己在ubuntu16.04 上用的软件和配置

    软件: 1.WPS2019: 这个不用多说了,真的是比之前的wps好太多了. 2.Chrom的画图插件: http://Draw.io,非常强,Draw.io 是一款在线图表编辑工具, 可以用来编辑工 ...

  5. Masa Blazor自定义组件封装

    前言 实际项目中总能遇到一个"组件"不是基础组件但是又会频繁复用的情况,在开发MASA Auth时也封装了几个组件.既有简单定义CSS样式和界面封装的组件(GroupBox),也有 ...

  6. WSL与Windows环境共享

    Reference 更多cmd.exe帮助参考 cmd_helps WSL备份及windows Docker安装 WSL安装维护 在使用wsl时,总是需要执行windows的cmd,但是windows ...

  7. django-rest-framework 基础四 过滤、排序、分页、异常处理

    django-rest-framework 基础四 过滤.排序.分页.异常处理 目录 django-rest-framework 基础四 过滤.排序.分页.异常处理 1. 过滤 1.1 内置过滤类 1 ...

  8. 为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1)

    请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,欢迎 ...

  9. Ubuntu16.04编译OpenJDK7u40

    下图是OpenJDK6.OpenJDK7.OpenJDK7u和OpenJDK8这几个项目之间的关系: 下面把编译步骤记录下来: 编译环境 Ubuntu 16.04.4 LTS jdk版本 openjd ...

  10. vue ui 创建vue项目 没反应的解决办法 2021

    1.升级vue 脚手架 即可   2.再  vue ui  创建项目 cnpm i -g @vue/cli