一、引言

做.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.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)

    2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...

  2. oracle创建dblink注意事项 ORA-04052

    BEGIN; oracle创建dblink语句: create database link dblink名称 connect to 用户名 identified by 密码 using '(DESCR ...

  3. 网络排查工具MTR介绍

    开源Linux 回复"读书",挑选书籍资料~ 常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络连通性判断工具 ...

  4. WSL与Windows环境共享

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

  5. MySQL 的 EXPLAIN 语句及用法

    在MySQL中 DESCRIBE 和 EXPLAIN 语句是相同的意思.DESCRIBE 语句多用于获取表结构,而 EXPLAIN 语句用于获取查询执行计划(用于解释MySQL如何执行查询语句). 通 ...

  6. SpringBoot从Eclipse添加的Tomcat容器中启动

    SpringBoot的Web项目,想要在Eclipse中的Tomcat容器中启动运行需要做下面这两处改动 pom.xml <packaging>war</packaging> ...

  7. Oceanbase读写分离方案探索与优化

    [作者] 许金柱,携程资深DBA,专注于分布式数据库研究及运维. 台枫,携程高级DBA,主要负责MySQL和OceanBase的运维. [前言]    读写分离,是一种将数据库的查询操作和写入操作分离 ...

  8. IPC机制与线程的操作

    目录 Queue模块 IPC机制(进程间通信) 生产者消费者模型 线程理论 创建线程的两种方式 线程实现TCP服务端的并发 线程join方法 线程数据共享 线程对象属性和方法 守护线程 GIL全局解释 ...

  9. MongoDB 设置用户和密码

    每日一句 Zeal without knowledge is fire without light. 没有知识的热忱犹如火之无光. 给每个数据库设置单独的管理员 我们除了可以设置数据库的超级管理员以外 ...

  10. Property or method "xxx" is not defined on the instance but referenced during render

    是xxx中的data写成date了,因此报错. 这个错误属于粗心